Die Installation von Nokogiri schlägt fehl. -Libxml2 fehlt

156

Ich habe mich immer um die Installationsprobleme von Nokogiri gekümmert, indem ich der Dokumentation im Tutorial " Installieren von Nokogiri " gefolgt bin .

Aber dieses Mal wurde Nokogiri auch nach der Installation aller Abhängigkeiten nicht installiert. Ich erhalte folgende Fehlermeldung:

libxml2 is missing.  please visit <http://nokogiri.org/tutorials/installing_nokogiri.html>

Ich habe versucht, es zu installieren, indem ich die Verzeichnisse libxml2 und libxslt angegeben habe:

sudo gem install nokogiri -- --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-dir=/usr/

aber es gab den gleichen Fehler zurück.

Ich folgte allen anderen verwandten Stack Overflow-Artikeln und keiner half. Hat jemand eine Lösung?

Rohit A.
quelle
1
Was ist Ihr Betriebssystem?
Jake Jones
2
Dies ist die passendere Antwort - sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra

Antworten:

163

Installieren Sie zunächst die Abhängigkeiten:

sudo apt-get install libxslt-dev libxml2-dev

Wenn Sie den Fehler weiterhin erhalten, fehlt möglicherweise eine Compiler-Toolchain:

sudo apt-get install build-essential

Sie erhalten den Fehler "libxml2 fehlt", wenn Sie eine Build-Toolchain vermissen (zumindest bin ich auf dieses Problem bei Debian Lenny gestoßen).

Der Nokogiri-Build testet eine libxml2-Headerdatei, um zu überprüfen, ob sie vorhanden ist. Sie unterscheidet jedoch nicht zwischen "libxml2 fehlt" und "ein Compiler zum Testen von libxml2 fehlt".

Erik Peterson
quelle
44
Wenn dies nicht der Fall ist, müssen Sie möglicherweise libxml2-dev
Erik Peterson
1
Ich habe den obigen Befehl ausgeführt und den Fehler 'libxml2 fehlt' erhalten. Können Sie mir mehr über die Installation der Build Tool Chain erzählen? Weil ich nicht viel Hilfe gefunden habe.
Rohit A.
1
Ich habe diese Meldung erhalten, weil ich gcc (oder einen anderen Compiler) nicht installiert hatte. Ich hatte keine Compiler-Toolchain.
Erik Peterson
7
Wenn Sie auf einem Mac sind: Brew Install Libxslt, dann Brew Install Libxml2
Sam Backus
245

Möglicherweise müssen Sie beide Pakete tatsächlich installieren

sudo apt-get install libxslt-dev libxml2-dev
Ryan
quelle
7
Wie kann ein Kommentar, der dies hoch bewertet, unter der akzeptierten Antwort liegen?
New Alexandria
3
Denn die Frage lautete "auch nach der Installation aller Abhängigkeiten". Die akzeptierte Antwort ist also die richtige.
b0fh
62

Unter Mac OS X (Mavericks) hat die Installation der Bibliotheken mit brewund die Einstellung NOKOGIRI_USE_SYSTEM_LIBRARIES=1vor der Installation des Gems den Trick für mich getan.

Zusammenfassend:

  • Wenn zuvor installiert, deinstallieren Sie das Juwel:

    gem uninstall nokogiri
  • Verwenden Sie Homebrew zu installieren libxml2, libxsltund libiconv:

    brew install libxml2 libxslt libiconv
  • Installieren Sie den Edelstein und geben Sie die Pfade zu den Bibliotheken an, mit denen verknüpft werden soll:

    NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"
Eduardo
quelle
Ich habe einige Fehler über libiconv erhalten: "Apple vertreibt libiconv unter OS X, Sie finden es in / usr / lib." Aber einfach das Kopieren Ihres Gem-Installationsskripts hat funktioniert :) Danke!
Automatico
Danke dir! Nachdem Sie einen ganzen Morgen lang versucht hatten, nokogiri zu installieren, funktionierte Ihre Antwort (speziell mit den Konfigurationspfaden) endlich - und nicht die Installation, die (ziemlich wenig hilfreich) besagt, dass libxml2 nicht vorhanden war, selbst wenn die Pfade korrekt waren.
Pebbl
2
Unter OS X Port anstelle von Brew zu verwenden und einfach loszulegen, $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogirihat den Trick getan
Andres Kütt
2
In OSX El Capitan 10.11.2 musste ich brew install libxml2 libxslt homebrew/dupes/libiconvdamit arbeiten
Hai Feng Kao
2
Außerdem muss ich hinzufügen, --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"damit der gem install nokogiriBefehl funktioniert. Andernfalls wird es zeigen libxml2 version 2.6.21 or later is required!(meine libxml2-Version ist 2.9.2)
Hai Feng Kao
22

Ich hatte gerade das gleiche Problem mit Fedora 13. Nach einer frustrierenden und erfolglosen Suche

gem install nokogiri

Arbeit für mich, ich konnte es installieren und den libxml2-Fehler über umgehen yum.

Installieren Sie den Edelstein einfach über yumanstelle des gemBefehls:

su
yum search rubygem-nokogiri   #this find the proper package name
yum install rubygem-nokogiri.i686

Dies hat mir geholfen, die richtige Antwort für Fedora zu finden, und da ich RVM für die Ruby-Paketverwaltung verwende,

yum install rubygem-nokogiri

wird alle Ruby-Edelsteine ​​und Abhängigkeiten in das System ziehen, nicht in meine RVM-Umgebung, und nach meiner Erfahrung führt dies zu einer sehr frustrierenden und demütigenden Erfahrung.

Nehmen Sie also Ihren Fund des Nokogiri-Yum-Edelsteins, den Sie verwenden können:

yum provides  rubygem-nokogiri

und eine Liste der Abhängigkeiten für rubygem-Nokogiri erhalten, die mir die fehlenden Bibliotheken zeigte. Danach rannte ich:

yum install libxml2-devel libxslt libxslt-devel

Jetzt kompiliert Nokogiri in Fedora und Nokogiri installiert. D'oh!, Wir brauchen die Header, um Nokogiri aus den Entwicklungsbibliotheken zu kompilieren.

Sojoodi
quelle
Dies tat es für mich, obwohl ich in Ubuntu apt-get install libnokogiri-ruby1.9.1 verwenden und dann die Gemfile bearbeiten musste, um nach nokogiri 1.5.5 statt 1.5.9 zu fragen
ffflabs
13

Wenn unter Mac OS X (Mavericks) keine dieser Lösungen funktioniert, versuchen Sie Folgendes:

ARCHFLAGS="-arch x86_64" gem install nokogiri

oder

ARCHFLAGS="-arch i386" gem install nokogiri

abhängig von der Architektur Ihres Systems.

Rilla
quelle
13

Normalerweise benötigen Sie Entwicklungsdateien, um Edelsteine ​​zu erstellen. Versuchen:

sudo apt-get install libxslt-dev libxml2-dev

(Ich habe gerade gesehen, dass Eric dasselbe in einem Kommentar vorgeschlagen hat.)

pduersteler
quelle
11

Ich konnte dies mit Chocolatey , Windows 8.1 x64 und DevKit x64 installieren .

cinst libxml2
cinst libxslt
cinst libiconv

gem install nokogiri -- 
  --with-xml2-include=C:\Chocolatey\lib\libxml2.2.7.8.7\build\native\include 
  --with-xml2-lib=C:\Chocolatey\lib\libxml2.redist.2.7.8.7\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-iconv-include=C:\Chocolatey\lib\libiconv.1.14.0.11\build\native\include 
  --with-iconv-lib=C:\Chocolatey\lib\libiconv.redist.1.14.0.11\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-xslt-include=C:\Chocolatey\lib\libxslt.1.1.28.0\build\native\include 
  --with-xslt-lib=C:\Chocolatey\lib\libxslt.redist.1.1.28.0\build\native\bin\v110\x64\Release\dynamic

Sie müssen überprüfen, ob die Versionsnummer in den Pfaden korrekt ist.

Möglicherweise müssen Sie das NuGet-Repository von Microsoft hinzufügen:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"
Chloe
quelle
Ich erhalte das Paket libxml2 nicht gefunden. Welche Quellen haben Sie in Chocolately?
Isaac Waller
3
Hab das Problem gefunden! Nuget-Quellen wurden in der Quelldatei von Chocolatey deaktiviert! Aber gem funktioniert nicht: [tid-1789500] 126: Das angegebene Modul wurde nicht gefunden. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric
@RatkoStibric Ich denke, Sie müssen mit den dynamischen Bibliotheken bauen : ...\x64\Release\dynamic\cdecl.
Chloe
1
chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck
1
Danke für Chocolatey, wusste noch nie davon!
Richard Peck
11

Es wird sein:

sudo yum install -y libxml2 libxml2-devel

auf RHEL-Servern.

hohner
quelle
6

Unter macOS hatte keines der oben / unten wirklich für mich funktioniert, bis ich explizit den XCode libxml2-Pfad zu angegeben habe --with-xml2-include.

gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2 --use-system-libraries
sobstel
quelle
4

Ich konnte Nokogiri 1.6.5 auf Fedora 20 installieren, indem ich Folgendes tat:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Dann laufen:

gem install nokogiri
Simone
quelle
4

Für alle anderen, bei denen dieses Problem auftritt, habe ich es gelöst, indem ich diesen Befehl im Projektverzeichnis ausgeführt habe

gem install nokogiri -- --use-system-libraries

Update: Ich bin erneut darauf gestoßen und habe versucht, nur das Juwel zu aktualisieren, das für mich funktioniert hat ...

gem update nokogiri

Jbur43
quelle
2

Haben Sie versucht, libxml2 zu installieren? Nicht von Rubygems, sondern über den Standardinstallationsprozess für Ihr Betriebssystem. Unter Ubuntu / Debian zum Beispiel:

sudo apt-get install libxml2

Auf jeder neueren Version von OS X sollte es bereits installiert sein.

d11wtq
quelle
Ich bin auf Ubuntu und habe alle oben genannten Installationen befolgt, wie in den anderen Fragen zum Stackoverflow beschrieben.
Rohit A.
1

Wenn Sie bei OSX-Benutzern bereits erfolgreich Nokogiri installiert haben und dennoch Fehler bei der Installation von Nokogiri erhalten, verwenden Sie beispielsweise eine neue Version von Ruby, die Sie hinzugefügt haben, und diesen Fehler, der eine Meldung wie die folgende enthält:

The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.

Dies kann darauf hinweisen, dass ein XCode-Upgrade manuell oder automatisch über den App Store durchgeführt wurde und Sie es seitdem nicht mehr geöffnet haben.

In diesem Fall sollten Sie in der Lage sein, XCode zu öffnen, der neuen Lizenz zuzustimmen und Nokogiri dann erfolgreich zu installieren.

Paul Fioravanti
quelle
1

Unter Mac OS X Yosemite war mein Fehler, dass ich versucht habe, sudo gem installwenn es eine Faustregel ist, bei der Installation von Gems keine Superuser-Berechtigungen zu verwenden.

In meinem Fall wurde versucht, die Systeminstallation von Ruby zu ändern, und das ist keine gute Idee. Ich habe rbenv installiert, Ruby 2.2.2 installiert und festgelegt global, was ein Begriff aus der Dokumentation von rbenv ist. Danach konnte sich Nokogiri mit einem einfachen installieren

gem install nokogiri

Es waren keine Hacks oder Workarounds erforderlich, nur eine ordnungsgemäß eingestellte Umgebung. Nokogiri erledigt den Rest perfekt.

Aleks N.
quelle
Mit sudoist OK IF Sie verstehen , wie es funktioniert, wo es Wirkung dauern wird, warum sollten die Dateien und installiert werden , installiert oder aktualisiert werden , wie die Aktion rückgängig zu machen , wenn es fehlschlägt. Andernfalls ist die Verwendung einer Sandbox wie rbenv oder RVM eine WIRKLICH gute Idee.
der Blechmann
1

Konnte Vagrant-Awe installieren, indem Sie dem obigen Beitrag folgten, aber den folgenden Befehl verwendeten:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
Romi
quelle
0

Ich konnte Nokogiri installieren, indem ich die folgenden Pakete ausführte:

$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch
user1455180
quelle
0

=== TLDR ===

Wie die Anweisungen Zustand build Rubin mit dem neuesten Klirren Compiler, oder zumindest die gleichen Version , dass Rubygems verwenden Nokogiri native Erweiterungen libxml und libxsl zu kompilieren.

Wenn Sie RVM verwenden, hat das Erstellen aus der Quelle mit der --with-ggc=clangFlagge das für mich getan:

rvm install 2.2 --with-gcc=clang

Ersetzen Sie 2.2durch eine beliebige Version. --with-gcc=clangstellt sicher, dass RVM aus dem Quellcode erstellt wird und verwendet dazu clang. Andernfalls kann RVM ein vorgefertigter binärer Ruby sein, was mich auslöste.

Installieren Sie dann Nokogiri wie gewohnt mit Bundler oder Rubygems.

=== IN DER TIEFE ===

Ich hatte eine Weile damit zu kämpfen. gem install nokogirigab mir:

checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no

Beim Eingraben mkmf.logsah ich:

conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }  

Nokogiri liefert seine eigenen libxml und libxsl (ab 1.6.4). Die in Nokogiris lokaler Kopie von parser.h (im Gem-Installationsverzeichnis) definierte Signatur lautet:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Ich war also ratlos darüber, wie der Methodenaufruf in der hermetisch versiegelten Datei conftest.c nicht mit der Header-Datei für parser.h übereinstimmen konnte.

Als ich merkte, dass ich wahrscheinlich einen binären Ruby installiert hatte, entfernte ich ihn und installierte ihn erneut mit --with-gcc=clang(um die Kompilierung zu erzwingen und clang zu verwenden) und das Problem wurde gelöst:

rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri

Ich bin mir nicht ganz sicher, warum das funktioniert, da der libxml-Header des Systems /usr/include/libxml2/libxml/parser.hdieselbe Signatur hat wie die lokale Kopie von Nokogiri .

Es ist komisch, aber es hat funktioniert. Stellen Sie einfach sicher, dass Sie einen Ruby mit clang kompilieren.

Johnster
quelle
0
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib

Ändern Sie Ihre Version damit.

Liber
quelle