=== 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=clang
drapeau a été ce qui l'a fait pour moi:
rvm install 2.2 --with-gcc=clang
Remplacez 2.2
par la version de votre choix. --with-gcc=clang
s'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 nokogiri
m'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.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 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.h
a 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.