=== TLDR ===
Wie die Anweisungen Zustand build Rubin mit dem neuesten Klirren Compiler, oder zumindest die gleichen Version , dass Rubygems verwenden Nokogiri native Erweiterungen libxml und libxsl zu kompilieren.
Wenn Sie RVM verwenden, hat das Erstellen aus der Quelle mit der --with-ggc=clang
Flagge das für mich getan:
rvm install 2.2 --with-gcc=clang
Ersetzen Sie 2.2
durch eine beliebige Version. --with-gcc=clang
stellt sicher, dass RVM aus dem Quellcode erstellt wird und verwendet dazu clang. Andernfalls kann RVM ein vorgefertigter binärer Ruby sein, was mich auslöste.
Installieren Sie dann Nokogiri wie gewohnt mit Bundler oder Rubygems.
=== IN DER TIEFE ===
Ich hatte eine Weile damit zu kämpfen. gem install nokogiri
gab mir:
checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no
Beim Eingraben mkmf.log
sah ich:
conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }
Nokogiri liefert seine eigenen libxml und libxsl (ab 1.6.4). Die in Nokogiris lokaler Kopie von parser.h (im Gem-Installationsverzeichnis) definierte Signatur lautet:
xmlParseDoc (const xmlChar *cur);
Ich war also ratlos darüber, wie der Methodenaufruf in der hermetisch versiegelten Datei conftest.c nicht mit der Header-Datei für parser.h übereinstimmen konnte.
Als ich merkte, dass ich wahrscheinlich einen binären Ruby installiert hatte, entfernte ich ihn und installierte ihn erneut mit --with-gcc=clang
(um die Kompilierung zu erzwingen und clang zu verwenden) und das Problem wurde gelöst:
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
Ich bin mir nicht ganz sicher, warum das funktioniert, da der libxml-Header des Systems /usr/include/libxml2/libxml/parser.h
dieselbe Signatur hat wie die lokale Kopie von Nokogiri .
Es ist komisch, aber es hat funktioniert. Stellen Sie einfach sicher, dass Sie einen Ruby mit clang kompilieren.