=== TLDR ===
Talimatların belirttiği gibi , Ruby'yi en son clang derleyicisiyle veya en azından Nokogiri'nin yerel uzantıları libxml ve libxsl'i derlemek için kullanacağı sürümle oluşturun.
RVM kullanıyorsanız, --with-ggc=clang
bayrakla kaynaktan kaynak oluşturmak benim için ne yaptı:
rvm install 2.2 --with-gcc=clang
2.2
İstediğiniz sürümle değiştirin . --with-gcc=clang
RVM'nin kaynaktan oluşturulmasını sağlar ve bunu yapmak için clang kullanır; aksi takdirde RVM önceden kurulmuş bir ikili Ruby olabilir, bu da beni harekete geçirdi.
Ardından, Bundler veya Rubygems kullanarak Nokogiri'yi normal şekilde yükleyin.
=== DERİNLİKTE ===
Bir süre bununla mücadele ettim. gem install nokogiri
bana verdi:
checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no
Kazdık mkmf.log
gördüm:
conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }
Nokogiri kendi libxml ve libxsl'ini sağlar (1.6.4 itibariyle). Nokogiri'nin yerel parser.h kopyasında (gem kurulum dizininin altında bulunur) tanımlanan imza:
xmlParseDoc (const xmlChar *cur);
Hermetically mühürlü conftest.c dosya kullanımında yöntem çağrısı parser.h başlık dosyası ile eşleşemedi ne kadar kaybı oldu.
Muhtemelen bir ikili Ruby kurduğumu fark ettiğimde --with-gcc=clang
(derlemeyi zorlamak ve clang kullanmak için) kullanarak yeniden yükledim ve sorun çözüldü:
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
Neden sistem libxml üstbilgisi /usr/include/libxml2/libxml/parser.h
Nokogiri yerel kopyayla aynı imzası olarak çalıştığını tam olarak emin değilim .
Tuhaf, ama işe yaradı. Bir Ruby'yi clang ile derlediğinizden emin olun.