Utilisateur Mac et obtenir AVERTISSEMENT: Nokogiri a été construit avec LibXML version 2.7.8, mais a chargé dynamicment 2.7.3

J’ai fait toutes sortes de recherches et essayé beaucoup de choses différentes. Je sais que cette question a été répondue à plusieurs resockets, mais aucune des solutions suggérées ne fonctionne pour moi.

Après la mise à niveau vers Lion, je reçois des erreurs de segmentation dans Ruby. Je suis assez confiant que c’est Nokogiri. J’ai donc installé libxml2 via Homebrew. J’ai couru le 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 comstackd: 2.7.8 loaded: 2.7.8 

J’ai déjà inclus Nokogiri en haut de mon fichier gemfile et je l’ai également demandé dans mon fichier d’environnement. Je n’ai aucune idée de pourquoi je reçois toujours cet avertissement.

Des suggestions ou des idées pour vous assurer qu’il charge la bonne version libxml2?

Je viens de passer la plus grande partie de la matinée à travailler sur cet avertissement. Ce correctif est destiné aux utilisateurs de 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 de démarrage. Quelle que soit la libxml2 que pointe Nokogiri, la bibliothèque par défaut du système Lion pour libxml2 sera utilisée lors de l’exécution. Lion utilise libxml2.2.7.3 dans /usr (pas /usr/local ).

Comme mentionné beaucoup d’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 un avertissement contraire:

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

Cela suggère qu’il y a plus à charger libxml2, avec Ruby et Rails utilisant le système chargé libxml2 et la ligne de commande utilisant libxml2 du chemin d’environnement. Quoi qu’il en soit, cela fait taire l’erreur pour moi.

Je le répète – c’est seulement pour Lion. Le correctif précédent fonctionnera pour Snow Leopard.

Ceci 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 bootstrap en désactivant libxml2 dans /usr/lib . Faites quelque chose comme copier toutes les versions de libxml2*.dylib vers libxml2*.dylib.old (sur ma machine, il s’agissait de libxml2.2.7.3 , libxml2.2 et libxml2 ).

Après avoir fait cela, l’exécution de Nokogiri ne produira aucune erreur. C’est parce qu’il ne peut pas trouver la libxml2 chargée et va maintenant suivre le chemin de l’environnement, trouvant éventuellement 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 du fichier libxml2 chargé dans le bootstrap.

Éteignez et rallumez votre machine. L’écran de connexion sera suspendu et suspendu. Éteignez et rallumez-le en mode mono-utilisateur (maintenez la touche CommandeS enfoncée lors du redémarrage). Vous pouvez regarder le bootstrap se produire. Faible et voici, il génère une erreur qu’il ne peut pas charger libxml2 et arrête ensuite de fonctionner.

Éteignez et rallumez. Cette fois, démarrez en mode de récupération (maintenez la touche CommandeR ou maintenez Option 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.

Si vous avez installé Nokogiri avec gem install nokogiri , vous pouvez résoudre cet avertissement en lançant gem pristine nokogiri pour recomstackr l’extension C de la gem.

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

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

 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 l’utilitaire, exécutez plutôt ces commandes:

 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 devez d’abord demander à nokogiri de forcer l’application à charger la bibliothèque dynamic libxml2 au lieu de l’ancienne version du système libxml2 chargée par des gems qui n’ont pas pu spécifier la bibliothèque à charger.

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

J’ai libxml2 installé à une version ultérieure (2.7.8) avec brew. Cela provoqua la compilation de nokogiri et des problèmes ultérieurs. Solution, retirez-la, puis créez, puis installez 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 (optionnel)

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

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

Selon le commentaire de pasortingckmcgraw ci-dessus, il m’a suffi de mettre nokogiri comme première entrée de mon fichier Gemfile. 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... 

Bundler a des options pour définir les emplacements de construction par défaut. Ainsi, par exemple, avec libxml2 installé via les 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 a disparu.

Il existe également des exemples utiles pour définir les options de construction sur le wiki nokogiri .

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 

J’ai eu un problème similaire et juste résolu de cette façon:

Dans mon cas, j’ai RVM installé, et j’ai eu les ensembles de pierres précieuses @global et @project. Nokogiri était installé sur l’un d’eux et l’un d’entre eux avait été construit avec différents libxml.

Les reconstruire tous les deux (j’ai une raison de le faire) a résolu le problème.

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

 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 …”, alors 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 libxml2 libxslt vous manque vraiment, 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 armsage et bundler.

gem installer libxml-ruby m’aide

En fait, j’ai eu 2 versions de libxml installées, une de source, une de RPM.

Ce qui suit est ma solution complète

J’ai désinstallé la source (du répertoire source)

 sudo make uninstall 

Supprimer les bundles

 rm -rf ~/.bundle ~/.bundler 

LD mis à jour (cela pourrait être fait en tant que root, pas sudo)

 sudo ldconfig 

Puis réinstallé le paquet

 bundle install 

Je suis tombé dessus (OS X Lion 10.7.5). Mon message exact était: Nokogiri a été construit avec LibXML version 2.8.0, mais a été chargé dynamicment 2.7.3

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

 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 contre lequel Nokogiri a été construit.”

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

OS: Maverick 10.9.3

Ruby 1.9.3

ATTENTION: Nokogiri a été construit avec LibXML version 2.9.1, mais a chargé dynamicment 2.9.0

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