L'installation de Nokogiri échoue -libxml2 est manquant

156

J'ai toujours contourné les problèmes d'installation de Nokogiri en suivant la documentation du didacticiel « Installer Nokogiri ».

Mais cette fois, même après avoir installé toutes les dépendances, Nokogiri n'a pas été installé. J'obtiens 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 n'a aidé. Quelqu'un a-t-il une solution?

Rohit A.
la source
1
Quel est votre système d'exploitation?
Jake Jones
2
C'est la réponse la plus appropriée - sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra

Réponses:

163

Tout d'abord, installez les dépendances:

sudo apt-get install libxslt-dev libxml2-dev

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

sudo apt-get install build-essential

Vous obtiendrez l'erreur "libxml2 est manquante" s'il vous manque une chaîne d'outils de construction (au moins j'ai rencontré ce problème sur Debian Lenny).

Le test de construction de Nokogiri compile un fichier d'en-tête libxml2 pour vérifier qu'il est présent, cependant, il ne fait pas la différence entre "libxml2 est manquant" et "un compilateur pour tester libxml2 est manquant".

Erik Peterson
la source
44
Si ce n'est pas le problème, vous devrez peut-être installer libxml2-dev
Erik Peterson
1
J'ai exécuté la commande ci-dessus et j'ai obtenu l'erreur «libxml2 est manquante». pouvez-vous m'en dire plus sur l'installation de la chaîne d'outils de construction. b'cos je n'ai pas trouvé beaucoup d'aide là-dessus.
Rohit A.
1
J'ai reçu ce message car je n'avais pas installé gcc (ni aucun autre compilateur). Je n'avais pas de chaîne d'outils de compilation.
Erik Peterson
7
Si vous êtes sur un mac: brew install libxslt puis brew install libxml2
Sam Backus
245

Vous devrez peut-être installer ces deux packages

sudo apt-get install libxslt-dev libxml2-dev
Ryan
la source
7
Comment un commentaire peut-il être bien placé en dessous de la réponse acceptée?
New Alexandria
3
Parce que la question a déclaré "même après l'installation de toutes les dépendances". La réponse acceptée est donc la bonne.
b0fh
62

Sous Mac OS X (Mavericks), installer les bibliothèques avec brewet paramétrer NOKOGIRI_USE_SYSTEM_LIBRARIES=1avant d'installer le gem a fait l'affaire pour moi.

En résumé:

  • S'il a déjà été installé, désinstallez le gem:

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

    brew install libxml2 libxslt libiconv
  • Installez le gem en spécifiant les chemins vers les 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"
Eduardo
la source
J'ai eu quelques erreurs concernant libiconv: "Apple distribue libiconv avec OS X, vous pouvez le trouver dans / usr / lib." Mais simplement copier votre script d'installation gem a fonctionné :) Merci!
Automatico
Je vous remercie! après une matinée entière à essayer d'installer nokogiri, votre réponse (spécifiquement avec les chemins de configuration) l'a finalement fait fonctionner - plutôt que l'installation déclarant (plutôt inutile) que libxml2 n'existait pas, même lorsque les chemins étaient corrects.
Pebbl
2
Utiliser le port au lieu de brew sur OS X et y aller a $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogirifait l'affaire
Andres Kütt
2
Dans OSX El Capitan 10.11.2, je dois l'utiliser brew install libxml2 libxslt homebrew/dupes/libiconvpour que cela fonctionne
Hai Feng Kao
2
En outre, je dois ajouter --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"pour que la gem install nokogiricommande fonctionne. Sinon, cela montrera libxml2 version 2.6.21 or later is required!(ma version libxml2 est 2.9.2)
Hai Feng Kao
22

J'ai juste eu le même problème sur Fedora 13. Après une recherche frustrante et infructueuse à faire

gem install nokogiri

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

Installez simplement le gem via yumau lieu de la gemcommande:

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, comme j'utilise RVM pour la gestion des paquets Ruby,

yum install rubygem-nokogiri

va intégrer toutes les gemmes et 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 trouvaille 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 les installations Fedora et Nokogiri. D'oh !, nous avons besoin des en-têtes pour compiler Nokogiri à partir des bibliothèques de développement.

Sojoodi
la source
Cela l'a fait pour moi, bien que dans ubuntu je devais utiliser apt-get install libnokogiri-ruby1.9.1 , puis éditer le Gemfile pour demander nokogiri 1.5.5 au lieu de 1.5.9
ffflabs
13

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.

rilla
la source
13

Vous avez généralement besoin de fichiers de développement pour créer 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.)

pduersteler
la source
11

J'ai pu l'installer 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"
Chloe
la source
J'obtiens 'Impossible de trouver le package libxml2'. Quelles sources avez-vous chez Chocolately?
Isaac Waller
3
Trouvé le problème! Les sources de Nuget ont été désactivées dans le fichier sources de Chocolatey! Mais gem ne fonctionne pas: [tid-1789500] 126: Le module spécifié est introuvable. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric
@RatkoStibric Je pense que vous devez construire avec les libs dynamiques: ...\x64\Release\dynamic\cdecl.
Chloe
1
Une fois chocolately installé, ajoutez une source à l'aide de la commande suivante:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck
1
Merci pour Chocolatey, je n'en ai jamais su avant!
Richard Peck
11

Ce sera:

sudo yum install -y libxml2 libxml2-devel

sur les serveurs RHEL.

Hohner
la source
6

Sous macOS, aucun des éléments ci-dessus / ci-dessous n'avait vraiment fonctionné pour moi jusqu'à ce que j'aie explicitement fourni le chemin d'accès à XCode libxml2 --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
sobstel
la source
4

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
Simone
la source
4

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: je suis tombé dessus à nouveau et j'ai essayé de mettre à jour le bijou qui a fonctionné pour moi ...

gem update nokogiri

Jbur43
la source
2

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é.

d11wtq
la source
je suis sur ubuntu et j'ai suivi toutes les installations ci-dessus comme indiqué dans les autres questions de stackoverflow.
Rohit A.
1

Pour les utilisateurs d'OSX, si vous avez déjà réussi à installer Nokogiri auparavant, mais que vous rencontrez des erreurs lors de son installation, par exemple, en utilisant une nouvelle version de Ruby que vous avez ajoutée et cette erreur qui comprend 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 ce temps.

Si tel est le cas, vous devriez pouvoir ouvrir XCode, accepter la nouvelle licence, puis installer Nokogiri avec succès.

Paul Fioravanti
la source
1

Sur Mac OS X Yosemite, mon erreur a été que j'ai essayé d'utiliser sudo gem installquand c'est une règle de base de ne pas utiliser les privilèges de superutilisateur lors de l'installation de gemmes.

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

gem install nokogiri

Aucun hacks ou solutions de contournement n'étaient nécessaires, juste un environnement correctement défini; Nokogiri fait parfaitement le reste.

Aleks N.
la source
L'utilisation sudoest OK SI vous comprenez comment cela fonctionne, où cela va prendre effet, pourquoi les fichiers installés ou mis à jour doivent être installés et comment annuler l'action en cas d'échec. Sinon, utiliser un bac à sable comme rbenv ou RVM est VRAIMENT une bonne idée.
The Tin Man
1

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
Romi
la source
0

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
user1455180
la source
0

=== TLDR ===

Comme l' indiquent les instructions , construisez Ruby avec le dernier compilateur clang, ou au moins la même version que Rubygems utilisera pour compiler les extensions natives de Nokogiri libxml et libxsl.

Si vous utilisez RVM, la construction à partir de la source avec le --with-ggc=clangdrapeau a été ce qui l'a fait pour moi:

rvm install 2.2 --with-gcc=clang

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

Ensuite, installez Nokogiri normalement en utilisant Bundler ou Rubygems.

=== EN PROFONDEUR ===

J'ai eu du mal avec ça pendant un moment. gem install nokogirim'a donné:

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

En creusant, mkmf.logj'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 Nokogiri de parser.h (trouvée sous le répertoire d'installation de gem) est:

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 pour parser.h.

Quand j'ai réalisé que j'avais probablement installé un Ruby binaire, 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 car l'en-tête système libxml /usr/include/libxml2/libxml/parser.ha la même signature que la copie locale de Nokogiri.

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

Johnster
la source
0
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.

Liber
la source