=== TLDR ===
Come indicato dalle istruzioni , compilare Ruby con l'ultimo compilatore clang, o almeno la stessa versione che Rubygems utilizzerà per compilare le estensioni native di Nokogiri libxml e libxsl.
Se usando RVM, costruire dalla sorgente con la --with-ggc=clang
bandiera è stato quello che ha fatto per me:
rvm install 2.2 --with-gcc=clang
Sostituisci 2.2
con qualsiasi versione desideri. --with-gcc=clang
assicura che RVM costruisca dal sorgente e usi clang per farlo; altrimenti RVM potrebbe essere un Ruby binario pre-costruito, che è ciò che mi ha fatto inciampare.
Quindi, installa Nokogiri normalmente usando Bundler o Rubygems.
=== IN PROFONDITÀ ===
Ho lottato con questo per un po '. gem install nokogiri
mi ha dato:
checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no
Scavando in mkmf.log
ho visto:
conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }
Nokogiri fornisce i propri libxml e libxsl (a partire dalla 1.6.4). La firma definita nella copia locale di parser.h di Nokogiri (che si trova nella directory di installazione gem) è:
xmlParseDoc (const xmlChar *cur);
Quindi non sapevo come utilizzare la chiamata del metodo nell'uso del file conftest.c sigillato ermeticamente con il file header per parser.h.
Quando mi sono reso conto di aver probabilmente installato un Ruby binario, ho rimosso e reinstallato usando --with-gcc=clang
(per forzare la compilazione e usare il clang) e il problema è stato risolto:
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
Non sono esattamente sicuro del perché funzioni come l'intestazione /usr/include/libxml2/libxml/parser.h
libxml di sistema abbia la stessa firma della copia locale di Nokogiri.
È strano, ma ha funzionato. Assicurati di compilare un Ruby con clang.