=== TLDR ===
ตามคำแนะนำให้สร้างทับทิมด้วยคอมไพเลอร์เสียงดังกราวล่าสุดหรืออย่างน้อยเวอร์ชั่นเดียวกับที่ Rubygems จะใช้ในการรวบรวมส่วนขยายดั้งเดิมของ Nokogiri libxml และ libxsl
หากใช้ RVM การสร้างจากแหล่งที่มี--with-ggc=clang
ธงเป็นสิ่งที่ทำเพื่อฉัน:
rvm install 2.2 --with-gcc=clang
แทนที่2.2
ด้วยเวอร์ชันที่คุณต้องการ --with-gcc=clang
สร้างความมั่นใจว่า RVM สร้างจากแหล่งที่มาและใช้เสียงดังกราว ไม่เช่นนั้น RVM อาจเป็นรูบีไบนารีที่สร้างไว้ล่วงหน้าซึ่งเป็นสิ่งที่ทำให้ฉันสะดุด
จากนั้นติดตั้ง Nokogiri ตามปกติโดยใช้ Bundler หรือ Rubygems
=== ในความลึก ===
ฉันดิ้นรนกับสิ่งนี้มาระยะหนึ่งแล้ว gem install nokogiri
ให้ฉัน:
checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no
ขุดลงไปที่mkmf.log
ฉันเห็น:
conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }
Nokogiri เป็นผู้จัดหา libxml และ libxsl ของตนเอง (ณ วันที่ 1.6.4) ลายเซ็นที่กำหนดไว้ในสำเนา parser.h ท้องถิ่นของ Nokogiri (พบในไดเรกทอรีติดตั้ง gem) คือ:
xmlParseDoc (const xmlChar *cur);
ดังนั้นฉันจึงรู้สึกว่าวิธีการโทรในการใช้ไฟล์ conftest.c ที่ปิดผนึกอย่างผนึกแน่นนั้นไม่สามารถจับคู่กับไฟล์ส่วนหัวสำหรับ parser.h ได้
เมื่อฉันรู้ว่าฉันได้ติดตั้ง Ruby Ruby แบบไบนารีที่ฉันลบและติดตั้งใหม่โดยใช้--with-gcc=clang
(เพื่อบังคับให้รวบรวมและใช้เสียงดังกราว) และปัญหาได้รับการแก้ไข:
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
ฉันไม่แน่ใจว่าทำไมสิ่งนั้นถึงทำงานเป็นส่วนหัวของระบบ libxml /usr/include/libxml2/libxml/parser.h
มีลายเซ็นเดียวกันกับสำเนาในเครื่องของ Nokogiri
มันแปลก แต่ก็ใช้งานได้ เพียงให้แน่ใจว่าคุณรวบรวมทับทิมด้วยเสียงดังกราว