=== TLDR ===
निर्देश राज्य के रूप में , रूबी को नवीनतम क्लैंग संकलक के साथ बनाएं, या कम से कम एक ही संस्करण है जो रूबीज नोकोगिरी के मूल एक्सटेंशन लिबक्सएमएल और लिबक्सस्ल को संकलित करने के लिए उपयोग करेगा।
यदि आरवीएम का उपयोग करते हैं, तो --with-ggc=clang
ध्वज के साथ स्रोत से निर्माण करना मेरे लिए क्या था:
rvm install 2.2 --with-gcc=clang
2.2
जो भी संस्करण आप चाहते हैं के साथ बदलें । --with-gcc=clang
RVM स्रोत से बनाता है और ऐसा करने के लिए क्लैंग का उपयोग करता है; अन्यथा आरवीएम एक पूर्व-निर्मित द्विआधारी रूबी हो सकता है, जो कि मुझे फंस गया है।
फिर, बुंडलर या रूबीगैम का उपयोग करके नोकोगिरी को सामान्य रूप से स्थापित करें।
=== DEPTH में ===
मैं कुछ समय तक इससे जूझता रहा। 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 के रूप में) की आपूर्ति करता है। Nokogiri की स्थानीय प्रति parser.h (रत्न स्थापित निर्देशिका के तहत पाया गया) में परिभाषित हस्ताक्षर है:
xmlParseDoc (const xmlChar *cur);
तो मैं एक नुकसान के रूप में था कि कैसे hermetically सील conftest.c फ़ाइल उपयोग में विधि कॉल parser.h के लिए हेडर फ़ाइल के साथ मेल नहीं खा सकता है।
जब मैंने महसूस किया कि मैंने शायद एक बाइनरी रूबी स्थापित किया था जिसे मैंने हटा दिया और --with-gcc=clang
(संकलन और बल का उपयोग करने के लिए) का उपयोग करके पुनः इंस्टॉल किया और समस्या हल हो गई:
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
मुझे बिलकुल यकीन नहीं है कि यह क्यों काम करता है क्योंकि सिस्टम libxml हेडर /usr/include/libxml2/libxml/parser.h
में नोकोगिरी की स्थानीय कॉपी के समान हस्ताक्षर हैं।
यह अजीब है, लेकिन यह काम किया। बस सुनिश्चित करें कि आप एक रूबी को क्लैंग के साथ संकलित करें।