=== TLDR ===
Seperti yang dinyatakan dalam instruksi , bangun Ruby dengan kompiler dentang terbaru, atau setidaknya versi yang sama dengan yang digunakan Rubygems untuk mengkompilasi libxml dan libxsl ekstensi asli Nokogiri.
Jika menggunakan RVM, membangun dari sumber dengan --with-ggc=clang
bendera adalah apa yang dilakukan untuk saya:
rvm install 2.2 --with-gcc=clang
Ganti 2.2
dengan versi apa pun yang Anda inginkan. --with-gcc=clang
memastikan RVM membangun dari sumber dan menggunakan dentang untuk melakukannya; jika tidak, RVM mungkin binary Ruby yang sudah dibuat sebelumnya, yang membuat saya tersandung.
Kemudian, instal Nokogiri seperti biasa menggunakan Bundler atau Rubygems.
=== DALAM KEDALAMAN ===
Saya berjuang dengan ini untuk sementara waktu. gem install nokogiri
memberi saya:
checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no
Menggali mkmf.log
saya melihat:
conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }
Nokogiri memasok libxml dan libxsl sendiri (pada 1.6.4). Tanda tangan yang didefinisikan dalam salinan parser.h lokal Nokogiri (ditemukan di bawah direktori install permata) adalah:
xmlParseDoc (const xmlChar *cur);
Jadi saya bingung bagaimana metode panggilan dalam penggunaan file conftest.c yang tertutup rapat tidak bisa cocok dengan file header untuk parser.h.
Ketika saya menyadari bahwa saya mungkin telah menginstal Ruby biner, saya menghapus dan menginstal ulang menggunakan --with-gcc=clang
(untuk memaksa kompilasi dan menggunakan dentang) dan masalahnya terpecahkan:
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
Saya tidak yakin mengapa itu bekerja karena header sistem libxml /usr/include/libxml2/libxml/parser.h
memiliki tanda tangan yang sama dengan salinan lokal Nokogiri.
Aneh, tapi berhasil. Pastikan Anda mengkompilasi Ruby dengan dentang.