web-dev-qa-db-fra.com

L'installation de Nokogiri échoue. -Libxml2 est manquant.

J'ai toujours résolu les problèmes d'installation de Nokogiri en suivant la documentation du didacticiel " Installation de Nokogiri ".

Mais cette fois, même après avoir installé toutes les dépendances, Nokogiri n’a pas été installé. Je reçois l'erreur suivante:

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

J'ai essayé de l'installer en spécifiant les répertoires libxml2 et libxslt:

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

mais il a renvoyé la même erreur.

J'ai suivi tous les autres articles liés à Stack Overflow et aucun ne m'a aidé. Quelqu'un a-t-il une solution?

153
Rohit A.

Tout d'abord, installez les dépendances:

Sudo apt-get install libxslt-dev libxml2-dev

Si vous recevez toujours l'erreur, il se peut qu'il manque une chaîne d'outils du compilateur:

Sudo apt-get install build-essential

Vous obtiendrez l'erreur "libxml2 is missing" s'il vous manque un ensemble d'outils de construction (au moins, j'ai rencontré ce problème sous Debian Lenny).

Le test Nokogiri compile un fichier d’en-tête libxml2 pour vérifier sa présence, mais ne fait pas la différence entre "libxml2 est manquant" et "un compilateur permettant de tester libxml2 est manquant".

156
Erik Peterson

Vous devrez peut-être installer ces deux paquets

Sudo apt-get install libxslt-dev libxml2-dev
244
Ryan

Sous Mac OS X (Mavericks), installez les bibliothèques avec brew et définissez NOKOGIRI_USE_SYSTEM_LIBRARIES=1 avant d'installer la gemme a fait l'affaire pour moi.

Résumant:

  • Si précédemment installé, désinstallez le gem:

    gem uninstall nokogiri
    
  • Utilisez Homebrew pour installer libxml2, libxslt et libiconv:

    brew install libxml2 libxslt libiconv
    
  • Installez la gem en spécifiant les chemins des bibliothèques à lier:

    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"
    
58
Eduardo

Je viens d'avoir le même problème sur Fedora 13. Après une recherche frustrante et infructueuse pour faire

gem install nokogiri

pour moi, j’ai pu l’installer et contourner l’erreur libxml2 via yum.

Installez simplement la gemme via yum à la place de la commande gem:

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

Cela m'a aidé à trouver la bonne réponse pour Fedora et, étant donné que j'utilise RVM pour la gestion du paquet Ruby),

yum install rubygem-nokogiri

attirera tous les joyaux et toutes les dépendances Ruby) dans le système, pas dans mon environnement RVM, et selon mon expérience, cela conduit à une expérience très frustrante et humiliante.

Donc, en prenant votre découverte de la gemme Nokogiri yum, vous pouvez utiliser:

yum provides  rubygem-nokogiri

et obtenez une liste des dépendances pour rubygem-Nokogiri qui m'a montré les bibliothèques manquantes. Après cela j'ai couru:

yum install libxml2-devel libxslt libxslt-devel

Maintenant, Nokogiri compile dans Fedora et installe Nokogiri. D'oh !, nous avons besoin des en-têtes pour compiler Nokogiri à partir des bibliothèques de développement.

21
Sojoodi

Vous avez généralement besoin de fichiers de développement pour construire des gemmes. Essayer:

Sudo apt-get install libxslt-dev libxml2-dev

(Je viens de voir qu'Eric a suggéré la même chose dans un commentaire.)

13
pduersteler

Sous Mac OS X (Mavericks), si aucune de ces solutions ne fonctionne, essayez:

ARCHFLAGS="-Arch x86_64" gem install nokogiri

ou

ARCHFLAGS="-Arch i386" gem install nokogiri

en fonction de l'architecture de votre système.

12
rilla

Ce sera:

Sudo yum install -y libxml2 libxml2-devel

sur les serveurs RHEL.

11
hohner

J'ai pu installer ceci avec Chocolatey , Windows 8.1 x64 et DevKit x64.

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

Vous devrez vérifier que le numéro de version dans les chemins est correct.

Vous devrez peut-être ajouter le référentiel NuGet de Microsoft:

-Source "https://go.Microsoft.com/fwlink/?LinkID=230477"
11
Chloe

Sur macOS, aucun des éléments ci-dessus/ci-dessous n'avait vraiment fonctionné pour moi jusqu'à ce que je fournisse explicitement le chemin XCode libxml2 vers --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
5
sobstel

J'ai pu installer Nokogiri 1.6.5 sur Fedora 20 en faisant:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Puis en cours d'exécution:

gem install nokogiri
4
Simone

Pour toute autre personne rencontrant ce problème, je l'ai résolu en exécutant cette commande dans le répertoire du projet.

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

Mise à jour: j'ai de nouveau rencontré ce problème et essayé simplement de mettre à jour la gemme qui a fonctionné pour moi ...

gem update nokogiri

4
Jbur43

Avez-vous essayé d'installer libxml2? Pas de rubygems, mais via le processus d'installation standard de votre système d'exploitation. Sur Ubuntu/Debian par exemple:

Sudo apt-get install libxml2

Sur toute version récente d'OS X, il devrait déjà être installé.

2
d11wtq

Pour les utilisateurs OSX, si vous avez déjà réussi à installer Nokogiri et que des erreurs surviennent lors de son installation, par exemple, en utilisant une nouvelle version de Ruby que vous avez ajoutée et cette erreur qui inclut un message comme:

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

Cela pourrait indiquer qu'une mise à niveau XCode s'est produite via l'App Store, manuellement ou automatiquement, et que vous ne l'avez pas ouverte depuis cette date.

Dans ce cas, vous devriez pouvoir ouvrir XCode, accepter la nouvelle licence, puis installer Nokogiri avec succès.

1
Paul Fioravanti

Pour Windows x64:

gem inst nokogiri --pre --platform Ruby

Pour plus d'informations, consultez ce sujet: https://github.com/sparklemotion/nokogiri/issues/864

1
magiccrafter

A pu installer vagrant-awe en suivant le post ci-dessus mais en utilisant la commande comme suit:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
1
Romi

Sous Mac OS X Yosemite, mon erreur est que j'ai essayé d'utiliser Sudo gem install lorsqu'il s'agit d'une règle empirique de ne pas utiliser les privilèges de superutilisateur lors de l'installation de gems.

Dans mon cas, il a essayé de modifier l'installation du système de Ruby, et ce n'est pas une bonne idée. J'ai installé rbenv, Ruby 2.2.2 et le régler comme global, terme qui provient de la documentation de rbenv. Après cela, Nokogiri pourrait s'installer avec un simple

gem install nokogiri

Aucun piratage ou solution de contournement n'était nécessaire, mais un environnement correctement configuré. Nokogiri fait le reste à la perfection.

1
Aleks N.

J'ai pu installer Nokogiri en exécutant les packages suivants:

$ dnf group install "C Development Tools and Libraries"
$ dnf install Ruby-devel libxml2-devel patch
0
user1455180
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

Changez votre version avec elle.

0
Liber

=== TLDR ===

En tant que les instructions state, build Ruby avec le dernier compilateur Clang, ou du moins la même version que celle utilisée par Rubygems pour compiler les extensions natives de Nokogiri, libxml et libxsl.

Si vous utilisez RVM, construisez à partir de la source avec le --with-ggc=clang drapeau était ce qui a fait pour moi:

rvm install 2.2 --with-gcc=clang

Remplacer 2.2 avec la version de votre choix. --with-gcc=clang s'assure que RVM se construit à partir de la source et utilise clang pour le faire; sinon RVM peut avoir un Ruby binaire pré-construit, ce qui m'a fait trébucher.

Ensuite, installez Nokogiri normalement à l’aide de Bundler ou de Rubygems.

=== EN PROFONDEUR ===

J'ai eu du mal avec cela pendant un moment. gem install nokogiri m'a donné:

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

Creuser dans mkmf.log J'ai vu:

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

Nokogiri fournit ses propres libxml et libxsl (à partir de 1.6.4). La signature définie dans la copie locale de Parser.h de Nokogiri (située sous le répertoire d'installation de gem) est la suivante:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Je ne savais donc pas comment l'appel de méthode dans l'utilisation du fichier conftest.c hermétiquement scellé ne pouvait pas correspondre au fichier d'en-tête de parser.h.

Quand j’ai réalisé que j’avais probablement installé un binaire Ruby j’ai supprimé et réinstallé en utilisant --with-gcc=clang (pour forcer la compilation et utiliser clang) et le problème a été résolu:

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

Je ne sais pas exactement pourquoi cela fonctionne en tant qu'en-tête du système libxml /usr/include/libxml2/libxml/parser.h a la même signature que la copie locale de Nokogiri.

C'est bizarre, mais ça a fonctionné. Assurez-vous simplement de compiler un Ruby avec clang.

0
Johnster