web-dev-qa-db-fra.com

Utilisateur Mac et obtenant AVERTISSEMENT: Nokogiri a été construit sur LibXML version 2.7.8, mais a chargé de manière dynamique 2.7.3

J'ai fait toutes sortes de recherches et essayé beaucoup de choses différentes. Je sais que cette question a reçu de nombreuses réponses, mais aucune des solutions suggérées ne fonctionne pour moi.

Après la mise à niveau vers Lion, des erreurs de segmentation se produisent dans Ruby. Je suis assez confiant, c'est Nokogiri. J'ai donc installé libxml2 via Homebrew. J'ai couru brew link libxml2. Ensuite, j'ai réinstallé Nokogiri en utilisant cette version de la bibliothèque.

Pour preuve:

$ 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

J'ai déjà inclus Nokogiri au sommet de mon fichier gem et je l'ai également demandé dans mon fichier d'environnement. Je ne sais pas pourquoi je reçois toujours cet avertissement.

Avez-vous des suggestions ou des idées pour vous assurer de charger la bonne version libxml2?

81
Binary Logic

Je viens de passer la majeure partie de la matinée à travailler sur cet avertissement. Ce correctif est destiné aux personnes utilisant Mac OS Lion. Le correctif ci-dessus en utilisant

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

est pour Snow Leopard avec libxml2 installé via MacPorts.

Avec Lion, libxml2 est chargé dans le cadre du processus d’amorçage. Indépendamment de la cible indiquée par libxml2, la bibliothèque par défaut du système Lion pour libxml2 sera utilisée à l'exécution. Lion utilise libxml2.2.7.3 dans /usr (et non /usr/local).

Comme mentionné de nombreux autres endroits, on peut simplement ignorer l'avertissement. Si, comme moi, l'avertissement vous rend fou, vous pouvez le faire:

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

Fait intéressant, si vous tapez nokogiri -v sur la ligne de commande, vous obtiendrez l’avertissement opposé:

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

Cela suggère que le chargement de libxml2 dépend de Rubx et de Rails qui utilisent libxml2 chargé par le système et de la ligne de commande qui utilise libxml2 à partir du chemin de l'environnement. Quoi qu'il en soit, cela réduit l'erreur pour moi.

Je le répète, cela ne concerne que Lion. Le correctif précédent fonctionnera pour Snow Leopard.

C'est la fin de la réponse. Arrêtez de lire ici.


OK, vous n’avez pas arrêté de lire ... eh bien ...

NON RECOMMANDÉ !!!!!!

Tu étais prévenu. Vous pouvez vérifier que Mac OSX charge la bibliothèque libxml2 dans son amorce en désactivant libxml2 présent dans /usr/lib. Faites quelque chose comme copier toutes les versions de libxml2*.dylib dans libxml2*.dylib.old (sur ma machine, il s'agissait de libxml2.2.7.3, libxml2.2 et libxml2).

Une fois que vous avez fait cela, exécuter Nokogiri ne produira aucune erreur. C’est parce qu’il ne peut pas trouver la libxml2 chargée et suivra maintenant le chemin de l’environnement, pour finir par trouver libxml2.2.7.8 dans /opt/local.

MAIS vous ne pourrez pas copier les anciens fichiers libxml. Cela est dû au fait que le système d'exploitation a besoin de la bibliothèque libxml2 chargée dans l'amorçage.

Eteindre et rallumer créera votre machine. L'écran de connexion va se bloquer et se raccrocher. Eteignez puis rallumez-vous en mode mono-utilisateur (maintenez Command-S lors du redémarrage). Vous pouvez regarder le bootstrap se produire. Bas et voici, il génère une erreur indiquant qu’il ne peut pas charger libxml2 puis cesse de fonctionner.

Éteignez puis rallumez. Cette fois, démarrez en mode de récupération (soit maintenez Command-R ou tenir Option puis sélectionnez le disque de récupération). En mode de récupération, ouvrez le terminal (utilities/terminal). Montez /usr/lib sur votre disque dur (essayez /Volumes/Macintosh\ HD/usr/lib) et copiez les fichiers libxml2. Redémarrez et tout ira bien.

39
Kenton

Si vous avez installé Nokogiri avec gem install nokogiri, vous pouvez résoudre cet avertissement en exécutant gem pristine nokogiri pour recompiler l'extension C de la gemme.

Si vous avez installé Nokogiri avec bundle install, vous pouvez résoudre cet avertissement en exécutant bundle exec gem pristine nokogiri pour recompiler l’extension C de la gem partout où Bundler l’a installée.

95
indirect

Pour résoudre ce problème si vous utilisez homebrew et bundler, ajoutez gem 'nokogiri' en haut de votre Gemfile, puis exécutez les commandes suivantes:

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

Si vous n'utilisez pas bundler, exécutez ces commandes à la place:

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/

Dans votre application, vous devriez demander à nokogiri en premier , pour forcer l'application à charger la bibliothèque dynamique libxml2 au lieu de l'ancienne version système de libxml2 chargée par des gems ne permettant pas de spécifier la bibliothèque à charger.

57
Michiel de Mare

Rien de tout cela n'a fonctionné pour moi.

Libxml2 était installé dans une version ultérieure (2.7.8) avec Brew. Cela a amené nokogiri à se compiler contre lui et les problèmes ultérieurs. Solution, supprimez-le, puis compilez-le, puis installez-le si vous le souhaitez.

Voici ce qui a fonctionné:

  • brew uninstall libxml2 (si précédemment installé)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (facultatif)
27
nkadwa

La solution (pour moi) après la mise à jour vers Mountain Lion était beaucoup plus simple:

gem uninstall nokogiri
# (and ignore the warnings about dependencies)
gem install nokogiri
15
IAmNaN

Selon le commentaire de patrickmcgraw ci-dessus, il suffit de mettre nokogiri comme première entrée de mon fichier Gemfile pour moi. Je le mets comme une réponse séparée parce que le commentaire original a été enterré.

source 'http://rubygems.org'
gem 'nokogiri'
gem 'Rails', '3.0.20'
etc...
9
Shaun

On dirait que vous avez mis à jour vos bibliothèques système après l'installation de la gem, vous devez donc mettre à jour Nokogiri. Pour utiliser la version actuelle de lib:

 gem install nokogiri -- --use-system-libraries
4
raittes

Bundler a des options pour définir les emplacements de construction par défaut. Ainsi, par exemple, avec libxml2 installé via macports:

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

Après avoir fait cela et bundle install, l'avertissement est parti.

Il y a aussi quelques exemples utiles pour définir les options de construction sur le nokogiri wiki

4
foz

J'ai eu le même problème et je viens de résoudre ce problème:

Dans mon cas, j'ai RVM installé et j'avais @global et @project gem sets . Tous les deux avaient nokogiri installé et l'un d'eux avait construit avec différents libxml.

Reconstruire les deux (j'ai des raisons de le faire) a résolu le problème.

J'espère que cela t'aides..

2
shigeya

gem installer libxml-Ruby m'aide

1
bmalets
gem uninstall nokogiri
bundle  #install nokogiri again

Si cela échoue avec "libxml2 est manquant". et vous voyez gems/nokogiri-1.5.0/ext/nokogiri/mkmf.log essayer d'utiliser "/usr/bin/gcc-4.2 ...", puis vous manquez /usr/bin/gcc-4.2

Solution: 

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

Avant:

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

Après:

$ 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

Si vous manquez vraiment libxml2 libxslt, alors

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

FYI: Je cours Mountain Lion avec breuvage et empaqueteur.

1
konyak

Si vous avez ce message et que votre nokogiri est obsolète avec la version disponible à partir de la source gem, exécutez simplement bundle update nokogiri pour obtenir le nouveau code et recompiler. Votre erreur devrait disparaître. 

0
Martin Streicher

Je viens de le rencontrer moi-même (OS X Lion 10.7.5). Mon message exact était: Nokogiri a été construit contre LibXML version 2.8.0, mais a chargé dynamiquement 2.7.3.

J'ai essayé quelques suggestions mentionnées ici, mais aucune n'a fonctionné, mais: 

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

L'explication est la suivante: "Cela se produit car la libxml2 par défaut du système Lion (chargée au démarrage) est utilisée, quel que soit le libxml2 Nokogiri utilisé." 

Crédits à: https://coderwall.com/p/o5ewia

0
Arta

J'avais en fait 2 versions de libxml installées, une de source et une de RPM.

Ce qui suit est ma solution complète

J'ai désinstallé la source (à partir du répertoire source) 

Sudo make uninstall

Retirer les paquets

rm -rf ~/.bundle ~/.bundler

Mise à jour LD (vous devrez peut-être le faire en tant que root, pas Sudo)

Sudo ldconfig

Puis réinstallé le paquet

bundle install
0
jessebs

OS: Maverick 10.9.3

Ruby 1.9.3

AVERTISSEMENT: Nokogiri a été construit sur la version 2.9.1 de LibXML, mais a chargé 2.9.0 de manière dynamique.

Ma solution:

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"

J'espère que cette aide

0
Phan Trung Kien