=== TLDR ===
指示として状態、最新打ち鳴らすコンパイラでビルドルビー、またはRubygemsのコンパイルに使用すること、少なくとも同じバージョン鋸山のネイティブエクステンションは、のlibxmlとlibxsl。
RVMを使用している場合、--with-ggc=clang
フラグを使用してソースからビルドすることが私のためにそれを行いました:
rvm install 2.2 --with-gcc=clang
2.2
任意のバージョンに置き換えます。--with-gcc=clang
RVMがソースからビルドされることを保証し、clangを使用してビルドします。それ以外の場合、RVMはビルド済みのバイナリRubyである可能性があり、それが原因で私が失敗しました。
次に、BundlerまたはRubygemsを使用して通常どおりNokogiriをインストールします。
===詳細===
しばらく苦労しました。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(gemインストールディレクトリにあります)で定義されている署名は次のとおりです。
xmlParseDoc (const xmlChar *cur);
そのため、密閉テストされたconftest.cファイルでのメソッド呼び出しがparser.hのヘッダーファイルとどのように一致しないかについて、私は途方に暮れました。
おそらくバイナリRubyをインストールしていることに気付いたとき、--with-gcc=clang
(コンパイルを強制してclangを使用するために)削除して再インストールし、問題を解決しました。
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
システムlibxmlヘッダー/usr/include/libxml2/libxml/parser.h
がNokogiri のローカルコピーと同じ署名を持っているので、なぜそれが機能するのか正確にはわかりません。
奇妙ですが、うまくいきました。Rubyをclangでコンパイルしていることを確認してください。