Mac-Benutzer und erhalten WARNUNG: Nokogiri wurde gegen LibXML Version 2.7.8 erstellt, hat aber dynamisch 2.7.3 geladen

82

Ich habe alle Arten von Recherchen durchgeführt und viele verschiedene Dinge ausprobiert. Ich weiß, dass diese Frage schon oft beantwortet wurde, aber keine der vorgeschlagenen Lösungen funktioniert für mich.

Nach dem Upgrade auf Lion erhalte ich Segmentierungsfehler in Ruby. Ich bin ziemlich sicher, dass es Nokogiri ist. Also habe ich libxml2 über Homebrew installiert. Ich rannte brew link libxml2. Dann habe ich Nokogiri mit dieser Version der Bibliothek neu installiert.

Zum Beweis:

$ nokogiri -v
# Nokogiri (1.5.0)
---
warnings: []
nokogiri: 1.5.0
ruby:
  version: 1.9.2
  platform: x86_64-darwin11.0.0
  description: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
  engine: ruby
libxml:
  binding: extension
  compiled: 2.7.8
  loaded: 2.7.8

Ich habe Nokogiri bereits oben in meine Gemfile aufgenommen und es auch in meine Umgebungsdatei aufgenommen. Ich habe keine Ahnung, warum ich diese Warnung immer noch bekomme.

Irgendwelche Vorschläge oder Ideen, um sicherzustellen, dass die richtige Version libxml2 geladen wird?

Binäre Logik
quelle
9
Nokogiri 1.6 und höher bündelt jetzt libxml2 mit dem Edelstein, sodass Sie diesen Fehler beheben können, indem Sie libxml2 einfach aus Homebrew entfernen. brew remove --force libxml2 bundle config --delete build.nokogiri gem uninstall nokogiri libxml-ruby bundle
Nate Berkopec
@NateBerkopec. Ihre Lösung hat bei mir funktioniert, die akzeptierte Antwort jedoch nicht.
Egyamado
1.6.2.1und Ubuntu 12.04nicht schön spielen. Zurückfallen, um das Problem zu 1.6.1beheben, nachdem ich alle anderen Probleme ausprobiert hatte, die ich finden konnte.
Damien Roche

Antworten:

39

Ich habe gerade den größten Teil des Morgens damit verbracht, diese Warnung durchzuarbeiten. Dieser Fix ist für Benutzer von Mac OS Lion gedacht. Das obige Update mit

bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local

ist für Snow Leopard mit libxml2 über MacPorts installiert.

Mit Lion wird libxml2 als Teil des Bootstrap-Prozesses geladen. Unabhängig davon, auf welche libxml2 Nokogiri verweist, wird zur Laufzeit die Standardbibliothek des Lion-Systems für libxml2 verwendet. Lion verwendet libxml2.2.7.3, das in /usr(nicht) gefunden wurde/usr/local ) gefunden wurde.

Wie bereits an vielen anderen Stellen erwähnt, kann man die Warnung einfach ignorieren. Wenn die Warnung Sie wie mich verrückt macht, können Sie Folgendes tun:

bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local

Interessanterweise erhalten Sie bei Eingabe nokogiri -vüber die Befehlszeile die entgegengesetzte Warnung:

WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8

Dies deutet darauf hin, dass libxml2 mehr geladen wird, wobei Ruby und Rails das vom System geladene libxml2 und die Befehlszeile libxml2 aus dem Umgebungspfad verwenden. Auf jeden Fall bringt dies den Fehler für mich zum Schweigen.

Ich werde es noch einmal sagen - das ist nur für Lion. Das vorherige Update funktioniert für Snow Leopard.

Dies ist das Ende der Antwort. Hör hier auf zu lesen.


OK, du hast nicht aufgehört zu lesen ... na ja ...

NICHT EMPFOHLEN!!!!!!

Du wurdest gewarnt. Sie können überprüfen, ob Mac OSX die libxml2-Bibliothek in ihren Bootstrap lädt, indem Sie libxml2 in deaktivieren /usr/lib. Tun Sie etwas , wie das Kopieren alle Versionen libxml2*.dylibauf libxml2*.dylib.old(auf meiner Maschine war libxml2.2.7.3, libxml2.2und libxml2).

Nachdem Sie dies getan haben, führt das Ausführen von Nokogiri zu keinen Fehlern. Das ist , weil es nicht die geladene libxml2 finden und wird nun die Umwelt Weg folgen, schließlich finden libxml2.2.7.8in/opt/local .

ABER Sie können die alten libxml-Dateien nicht zurückkopieren. Dies liegt daran, dass das Betriebssystem die libxml2 benötigt, die in den Bootstrap geladen wurde.

Durch Aus- und Wiedereinschalten wird Ihre Maschine beschädigt. Der Anmeldebildschirm hängt und hängt und hängt. Im Einzelbenutzermodus aus- und wieder einschalten (gedrückt halten Command-S aus- gedrückt beim Neustart). Sie können das Auftreten des Bootstraps beobachten. Niedrig und siehe da, es wird ein Fehler ausgegeben, dass libxml2 nicht geladen werden kann und dann nicht mehr funktioniert.

Aus- und wieder einschalten. Booten Sie diesmal in den Wiederherstellungsmodus (entweder halten Command- Roder halten Optionund dann die Wiederherstellungsdiskette auswählen). Öffnen Sie im Wiederherstellungsmodus das Terminal ( utilities/terminal). Mounten Sie /usr/libauf Ihrer Festplatte (versuchen Sie es /Volumes/Macintosh\ HD/usr/lib) und kopieren Sie die libxml2-Dateien zurück. Starten Sie neu und alles wird gut.

Kenton
quelle
1
heh ... Ihre Anweisungen, die Build-Optionen zwischen / usr und / opt / local (MacPorts)
aufzuteilen,
Ich bin froh zu sehen, dass jemand, der schlauer als ich ist, auch dem Albtraum von Apple Bootstrap libxml2 zum Opfer gefallen ist :)
Kenton
Ich bin nur zufällig über diesen Beitrag gestolpert und hatte keine Verwendung dafür, aber diese detaillierte Antwort verdient viele positive Stimmen für die Mühe!
starscream_disco_party
2
Ich habe eine Variation dieser Lösung verwendet (wobei meine dynamisch geladene Version 2.9.0 war):bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
sberkley
Vielen Dank an @sberkley für den aktualisierten Tipp. Als ich es ausführte, bemerkte ich, dass ~es diesen Wert global zu setzen scheint , wenn Sie es tun . Vielleicht können Sie dies nur einmal tun und müssen sich nie wieder darum kümmern.
Duma
96

Wenn Sie Nokogiri mit installiert haben gem install nokogiri, können Sie diese Warnung beheben, indem Sie gem pristine nokogiridie C-Erweiterung des Edelsteins neu kompilieren.

Wenn Sie Nokogiri mit installiert haben bundle install, können Sie diese Warnung beheben, indem Sie ausführen , um bundle exec gem pristine nokogiridie C-Erweiterung des Gems überall dort neu zu kompilieren, wo Bundler es installiert hat.

indirekt
quelle
5
Ausgezeichnet, vielen Dank. bundle exec gem pristine nokogirigeschafft.
Toxaq
1
Funktionierte perfekt für mich mit der Warnung, gegen 2.8.0 gebaut zu werden, indem 2.7.8 unter Ubuntu 12.04
Richard
Um die Warnung zu erhalten, auf Lion and Rails 3.2.16 zu verschwinden, musste ich sowohl 'Bundle Exec Gem Pristine Nokogiri' als auch 'Gem Nokogiri' vor '
Gem
1
Dies funktionierte bei mir in OS X Mavericks, akzeptierte Antwort nicht.
CBanga
Dies sollte die akzeptierte Antwort sein, nicht etwas, das Ihre Maschine möglicherweise beschädigen könnte, geschweige denn extrem ausführlich und verwirrend.
Greg Blass
58

Um dies zu beheben, wenn Sie Homebrew und Bundler verwenden, fügen Sie gem 'nokogiri' oben hinzu und führen Sie Gemfiledie folgenden Befehle aus:

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2 --with-xml2-config
brew install libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
bundle install

Wenn Sie keinen Bundler verwenden, führen Sie stattdessen die folgenden Befehle aus:

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2 --with-xml2-config
brew install libxslt
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/

In Ihrer App sollten Sie zuerst nokogiri benötigen , um die App zum Laden der dynamischen libxml2-Bibliothek anstelle der älteren Systemversion von libxml2 zu zwingen, die von Gems geladen wurde, die nicht angegeben haben, welche Bibliothek geladen werden soll.

Michiel de Mare
quelle
Ich denke nicht, dass die linkund unlinkBefehle benötigt werden. Ich konnte entkommen, ohne sie zu benutzen.
M. Scott Ford
Beachten Sie, dass Sie den gemBefehlen möglicherweise voranstellen müssen, bundle execz. B. wenn Sie verwenden rbenv.
asymmetrisch
4
Gibt es einen Grund, den Sie nicht einbeziehen brew uninstall libxslt?
Nate Berkopec
5
Für diejenigen, die diese Antwort kopieren, ist die neueste Version von libxml2 2.9.0 - bearbeiten Sie diese beim Einfügen von Kopien unbedingt!
Nate Berkopec
7
Es muss hervorgehoben werden, dass der letzte Satz wichtig ist: zuerst nogogiri benötigen Tun Sie dies, indem Sie nokogiri vor den Schienen in Ihr Gemfile einfügen.
Wolfram Arnold
28

Nichts davon hat bei mir funktioniert.

Ich hatte libxml2 in einer späteren Version (2.7.8) mit Brew installiert. Dies führte dazu, dass sich nokogiri dagegen und die späteren Probleme kompilierte. Lösung, entfernen Sie es, erstellen Sie es und installieren Sie es, falls gewünscht.

Folgendes hat funktioniert:

  • brew uninstall libxml2 (falls zuvor installiert)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (Optional)
nkadwa
quelle
3
Dies hat es für mich unter OS X 10.8.2 mit libxml 2.7.8 / 2.8.0 behoben. Nur das Entfernen des Nokia-Edelsteins und das erneute Installieren des Edelsteins lösten es nicht, aber brew uninstall libxml2zuvor. Vielen Dank!
Stereoscott
1
perfekte Antwort bei Verwendung von Homebrew
awenkhh
+1 Perfekt. Der Schlüssel ist, KEINE andere Version von libxml2 zu installieren, wenn Sie nokogiri installieren.
Nate Cook
Nur für den Fall, dass jemand anderes RubyMine ist, habe ich mir dabei geholfen, den Fehler zu beheben, den ich bundle installin RubyMine erhalten habe. Sie können den gleichen Fehler in der Befehlszeile sehen, wenn Sierake --tasks
Nate Cook
Das war die richtige Lösung für mich. Ich verwende Mountain Lion und verwende Homebrew (und Intellij IDEA).
Duma
16

Die Lösung (für mich) nach dem Update auf Mountain Lion war viel einfacher:

gem uninstall nokogiri
# (and ignore the warnings about dependencies)
gem install nokogiri
IAmNaN
quelle
4
Danke für das Feedback, Old Pro. Ich empfehle Ihnen, die Fragen und Antworten zu SO Privileges erneut zu lesen. "Verwenden Sie Ihre Abstimmungen immer dann, wenn Sie auf einen ungeheuer schlampigen, mühelosen Beitrag oder eine Antwort stoßen, die eindeutig und möglicherweise gefährlich falsch ist." Diese Antwort hat eindeutig für mehrere Personen, einschließlich des OP, funktioniert, daher glaube ich nicht, dass dies eine Ablehnung rechtfertigt.
IAmNaN
1
Aufgrund der kürzlich entdeckten DOS-Sicherheitslücke beim CPU-Verbrauch ( vuxml.org/freebsd/843a4641-9816-11e2-9c51-080027019be0.html ) haben wir libxml2 auf FreeBSD aktualisiert und die betreffende Nokiaogiri-Warnung ausgelöst . Eine Neuinstallation wie beschrieben hat das Problem behoben.
user569825
Arbeitete für mich unter OSX 10.8.5
Steakchaser
1
Nein, @Tass. update prüft einfach, ob es eine neue Version des Edelsteins gibt, die es in diesem Fall nicht gibt. Es ist mehr als zwei Jahre her, aber ich erinnere mich, dass das Update ohne Deinstallation ein NOP war. Ich vermute, dass sich die Version von nokogiri nicht ändert, aber die Bibliotheken müssen nach dem Upgrade des Betriebssystems mit verschiedenen Headern kompiliert werden. Diese Methode hat übrigens nach mehreren OSX-Updates jetzt funktioniert.
IAmNaN
9

Gemäß dem Kommentar von patrickmcgraw oben hat es für mich funktioniert, einfach nokogiri als ersten Eintrag in meine Gemfile zu setzen. Ich stelle es als separate Antwort, weil der ursprüngliche Kommentar begraben wurde.

source 'http://rubygems.org'
gem 'nokogiri'
gem 'rails', '3.0.20'
etc...
Shaun
quelle
1
Eine Erklärung, warum dies funktioniert, finden Sie in dieser Antwort von @Jarrett
Jared Beck
Ja! Hilft mir bei 'WARNUNG: Nokogiri wurde gegen LibXML Version 2.8.0 erstellt, hat aber dynamisch 2.7.8' geladen
Artem Aminov
4

Bundler hat Optionen zum Festlegen der Standard-Build-Speicherorte. So zum Beispiel mit libxml2, das über Macports installiert wurde:

$ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local

Danach und bundle install ging die Warnung weg.

Es gibt auch einige hilfreiche Beispiele zum Festlegen von Build-Optionen im Nokiaogiri-Wiki .

foz
quelle
4

Sieht so aus, als hätten Sie Ihre Systembibliotheken nach der Installation des Gems aktualisiert, sodass Sie Nokogiri aktualisieren müssen. So verwenden Sie die aktuelle lib-Version:

 gem install nokogiri -- --use-system-libraries
raittes
quelle
2

Ich hatte ein ähnliches Problem und löste es einfach so:

In meinem Fall habe ich RVM installiert und ich hatte @global und @project Gem Sets. Beide hatten Nokogiri installiert und einer von ihnen hatte mit verschiedenen libxml gebaut.

Der Wiederaufbau beider (ich habe Grund dazu) löste das Problem.

Hoffe das hilft..

Shigeya
quelle
1
gem uninstall nokogiri
bundle  #install nokogiri again

Wenn dies mit "libxml2 fehlt" fehlschlägt. und Sie sehen gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log, die versuchen, "/usr/bin/gcc-4.2 ..." zu verwenden, dann fehlt Ihnen /usr/bin/gcc-4.2

Lösung:

sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2

Vor:

$ ll /usr/bin/gcc*
lrwxr-xr-x  1 root  wheel  12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2

Nach dem:

$ ll /usr/bin/gcc*
lrwxr-xr-x  1 root  wheel  12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
lrwxr-xr-x  1 root  wheel  12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc

Wenn Sie libxml2 libxslt wirklich vermissen, dann

brew update
brew install libxml2 libxslt
brew link libxml2 libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
bundle

Zu Ihrer Information: Ich leite Mountain Lion mit Gebräu und Bündler.

konyak
quelle
1

gem install libxml-ruby hilft mir

Bmalets
quelle
0

Ich hatte tatsächlich 2 Versionen von libxml installiert, eine von der Quelle, eine von einem RPM.

Das Folgende ist meine vollständige Lösung

Ich habe die Quelle deinstalliert (aus dem Quellverzeichnis).

sudo make uninstall

Bündel entfernen

rm -rf ~/.bundle ~/.bundler

Aktualisierte LD (muss dies möglicherweise als root tun, nicht als sudo)

sudo ldconfig

Installieren Sie dann das Bundle neu

bundle install
Jessebs
quelle
0

Ich bin gerade darauf gestoßen (OS X Lion 10.7.5). Meine genaue Nachricht war: Nokogiri wurde gegen LibXML Version 2.8.0 erstellt, hat aber 2.7.3 dynamisch geladen

Ich habe ein paar Vorschläge ausprobiert, von denen keiner funktioniert hat, aber das hat funktioniert:

gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local

Die Erklärung lautet: "Dies geschieht, weil die Standardeinstellung libxml2 des Lion-Systems (geladen beim Bootstrap) verwendet wird, unabhängig davon, gegen welche libxml2 Nokogiri erstellt wurde."

Credits an: https://coderwall.com/p/o5ewia

Arta
quelle
0

Betriebssystem: Maverick 10.9.3

Ruby 1.9.3

WARNUNG: Nokogiri wurde gegen LibXML Version 2.9.1 erstellt, hat jedoch dynamisch 2.9.0 geladen

Meine Lösung:

gem uninstall nokogiri
brew update
cd /usr/local
brew versions libxml2
git checkout 5dd45d7 /usr/local/Library/Formula/libxml2.rb # libxml version 2.9.0
brew install libxml2
bundle install or gem install nokogiri -v "1.5.11"

Ich hoffe das hilft

Phan Trung Kien
quelle
0

Wenn Sie diese Nachricht haben und Ihr Nokiaogiri mit der aus der Edelsteinquelle verfügbaren Version nicht mehr aktuell ist, führen Sie sie einfach aus bundle update nokogiri, um den neuen Code abzurufen und neu zu kompilieren. Ihr Fehler sollte verschwinden.

Martin Streicher
quelle