J'installe la gemme Ruby Nokogiri et trouve l'erreur ci-dessous.
Comment diagnostiquer cela et le résoudre?
# gem install nokogiri
Building native extensions. This could take a while...
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.
...
/opt/Ruby/1.9.3-p194/bin/Ruby extconf.rb
checking for libxml/parser.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
...
/opt/Ruby/1.9.3-p194/lib/Ruby/1.9.1/mkmf.rb:381:in `try_do':
The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /opt/Ruby/1.9.3-p194/lib/Ruby/1.9.1/mkmf.rb:506:in `try_cpp'
...
Pour diagnostiquer et résoudre, voici ce qui a fonctionné pour moi.
Pour savoir ce qui a échoué, accédez à votre répertoire Ruby Gems.
Par exemple:
$ cd <MY Ruby DIRECTORY>/lib/Ruby/gems/2.0.0/gems
Si vous ne connaissez pas votre répertoire Gem, essayez ceci:
$ echo $GEM_HOME
/opt/gems/2.0.0
$ cd /opt/gems/2.0.0/gems
Quelle version de nokogiri est-ce que j'installe?
$ ls -ladg nokogiri-*
nokogiri-1.5.5
Allez dans le répertoire d'installation:
$ cd nokogiri-1.5.5/ext/nokogiri
Essayez d'installer manuellement:
$ Ruby extconf.rb
Résultat:
checking for libxml/parser.h... *** extconf.rb failed ***
...
J'utilise Ubuntu et je recherche donc des packages similaires:
$ aptitude search libxml
Résultats:
p libxml2 - GNOME XML library
p libxml2-dev - Development files for the GNOME XML library
...
Je crois que libxml2 fonctionnera bien.
$ apt-get install libxml2
Les gemmes natives Ruby ont souvent besoin des paquets * -dev pour les en-têtes, alors installez-les:
$ apt-get install libxml2-dev
Ai-je maintenant le fichier d'analyse?
$ find / | grep libxml/parser.h
Oui, le résultat montre l'analyseur:
/usr/include/libxml2/libxml/parser.h
Maintenant, essayez d’installer à nouveau, cette fois en fournissant le chemin libxml2:
$ gem install nokogiri -- --with-xml2-dir=/usr/include/libxml2
Il échoue toujours, alors lisez le journal des erreurs mkmf:
$ more mkmf.log
Le journal des erreurs montre ce qui a échoué et ces lignes semblent prometteuses:
package configuration for libxslt is not found
Y at-il un paquet pour cela?
$ aptitude search libxslt
Résultats:
v libxslt-dev
i libxslt-Ruby
...
Installez le paquet dev:
$ apt-get install libxslt-dev
Maintenant, essayez de réinstaller, et mettez aussi xslt sur le chemin:
$ gem install nokogiri -- \
--with-xml2-dir=/usr/include/libxml2 \
--with-xslt-dir=/usr/include/libxslt
Succès!
'Installation de Nokogiri' est un site Web dédié à l'installation de Nokogiri sur les principales plates-formes. Voici un extrait de l'installation de Nokogiri sur Ubuntu:
Parce que Nokogiri doit être compilé et lié dynamiquement à à la fois libxml2 et libxslt, il a acquis la réputation d'être compliqué à installer.
À partir de Nokogiri 1.6, le code source libxml2 et libxslt est fourni avec Nokogiri, et compilé au moment de l’installation de Gem. Les instructions dans cette document devrait fonctionner pour toutes les versions 1.6.4 et ultérieures.
Ubuntu/Debian
L’installation devrait fonctionner avec Ubuntu et Debian à l’aide de Nokogiri vendored libxml2 et libxslt:
gem install nokogiri
[...]
Utilisation de vos bibliothèques système
Si, au lieu des bibliothèques vendues par Nokogiri, vous souhaitez utiliser votre fichier libxml2, libxslt et les bibliothèques associées du système, veuillez commencer par comprenez que vous demandez peut-être à Nokogiri de travailler avec un appareil sans support version de libxml2.
Sudo apt-get install pkg-config gem install nokogiri -- --use-system-libraries
FYI - J'utilise Nokogiri 1.6.6.2 et cela n'a pas "fonctionné". Je l'ai eu avec le --use-system-libraries
.
Les conseils du site Web couvrent également OS X - cela a fonctionné pour moi:
gem update --system
xcode-select --install
gem install nokogiri
Si vous avez un problème Nokogiri sur n’importe quelle plate-forme, vous devriez consultez le site Web .
Sur CentOS, voici ce que je devais faire:
gem update --system
yum install libxml2-devel libxslt-devel Ruby-devel
gem install nokogiri -- --use-system-libraries
Impossible de créer le Makefile pour une raison quelconque, probablement manque de bibliothèques et/ou d’en-têtes nécessaires .
Il vous manque probablement des en-têtes zlib requis pour l'attribut -lz
afin de compiler correctement les sources. Installer sur Linux par:
Sudo apt-get install libz-dev
Pour libiconv manquant, essayez d’installer le package libiconv-hook-dev
qui contient des fichiers d’entête de libiconv-hook
, par exemple.
Sudo apt-get install libiconv-hook1 libiconv-hook-dev
Sous OS X, essayez d'installer les outils de développement via: xcode-select --install
.
Si le problème persiste, consultez le fichier mkmf.log
pour plus de détails sur votre erreur.
Sous Ubuntu, essayez le combo de correction de dépendance suivant:
Sudo apt-get install gcc Ruby-dev libxslt-dev libxml2-dev zlib1g-dev
L'erreur 'impossible de créer le Makefile' que vous voyez peut également être due au fait que vous n'avez pas accepté la licence Xcode (vous devez l'accepter après chaque mise à jour de Xcode). Exécuter Sudo xcodebuild -license accept
devrait éliminer cette erreur pour vous et vous permettre d'exécuter ensuite gem install nokogiri
avec succès.