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?
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".
Vous devrez peut-être installer ces deux paquets
Sudo apt-get install libxslt-dev libxml2-dev
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"
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.
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.)
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.
Ce sera:
Sudo yum install -y libxml2 libxml2-devel
sur les serveurs RHEL.
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"
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
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
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
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é.
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.
Pour Windows x64:
gem inst nokogiri --pre --platform Ruby
Pour plus d'informations, consultez ce sujet: https://github.com/sparklemotion/nokogiri/issues/864
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
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.
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
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.
=== 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.