「 Installing Nokogiri 」チュートリアルのドキュメントに従って、Nokogiriのインストールの問題を常に回避しました。
しかし、今回は、すべての依存関係をインストールした後でも、Nokogiriはインストールされていません。次のエラーが表示されます。
libxml2 is missing. please visit <http://nokogiri.org/tutorials/installing_nokogiri.html>
Libxml2とlibxsltディレクトリを指定してインストールしようとしました:
Sudo gem install nokogiri -- --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-dir=/usr/
しかし、それは同じエラーを返しました。
他の関連するStack Overflowの記事をすべてフォローしましたが、何も助けませんでした。誰にも解決策がありますか?
まず、依存関係をインストールします。
Sudo apt-get install libxslt-dev libxml2-dev
それでもエラーが表示される場合は、コンパイラツールチェーンが欠落している可能性があります。
Sudo apt-get install build-essential
ビルドツールチェーンが欠落している場合、「libxml2が欠落しています」というエラーが表示されます(少なくともDebian Lennyでこの問題に遭遇しました)。
Nokogiriビルドは、libxml2ヘッダーファイルをテストコンパイルして存在することを確認しますが、「libxml2が見つからない」と「libxml2をテストするコンパイラが見つからない」を区別しません。
これらのパッケージの両方を実際にインストールする必要がある場合があります
Sudo apt-get install libxslt-dev libxml2-dev
Mac OS X(Mavericks)では、gemをインストールする前にbrew
を使用してライブラリをインストールし、NOKOGIRI_USE_SYSTEM_LIBRARIES=1
を設定してくれました。
要約:
以前にインストールした場合は、gemをアンインストールします。
gem uninstall nokogiri
Homebrewを使用してlibxml2
、libxslt
およびlibiconv
をインストールします。
brew install libxml2 libxslt libiconv
リンクするライブラリへのパスを指定してgemをインストールします。
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"
Fedora 13でも同じ問題が発生しました。イライラして失敗した検索を行った後、
gem install nokogiri
私のために働いて、私はそれをインストールし、yum
経由でlibxml2エラーを回避することができました。
yum
コマンドの代わりにgem
経由でgemをインストールするだけです:
su
yum search rubygem-nokogiri #this find the proper package name
yum install rubygem-nokogiri.i686
これはFedoraの正しい答えを見つけるのに役立ちました。また、Rubyパッケージ管理にRVMを使用しているため、
yum install rubygem-nokogiri
すべてのRuby gemおよび依存関係をRVM環境ではなくシステムに取り込み、非常にイライラさせて謙虚な体験をもたらす私の経験に入れます。
だから、あなたが使用できるノコギリのyum gemを見つけてください:
yum provides rubygem-nokogiri
rubygem-Nokogiriの依存関係のリストを取得すると、欠落しているライブラリが表示されました。その後、私は走った:
yum install libxml2-devel libxslt libxslt-devel
現在、NokogiriはFedoraでコンパイルされ、Nokogiriがインストールされます。 D'oh!、develライブラリからNokogiriをコンパイルするにはヘッダーが必要です。
通常、gemsを構築するには開発ファイルが必要です。試してください:
Sudo apt-get install libxslt-dev libxml2-dev
(エリックがコメントで同じことを提案したのを見たところです。)
Mac OS X(Mavericks)で、これらのソリューションがどれも機能しない場合は、以下を試してください:
ARCHFLAGS="-Arch x86_64" gem install nokogiri
または
ARCHFLAGS="-Arch i386" gem install nokogiri
システムのアーキテクチャに依存します。
そうなる:
Sudo yum install -y libxml2 libxml2-devel
rHELサーバー上。
これを Chocolatey 、Windows 8.1 x64、およびDevKit x64でインストールすることができました。
cinst libxml2
cinst libxslt
cinst libiconv
gem install nokogiri --
--with-xml2-include=C:\Chocolatey\lib\libxml2.2.7.8.7\build\native\include
--with-xml2-lib=C:\Chocolatey\lib\libxml2.redist.2.7.8.7\build\native\bin\v110\x64\Release\dynamic\cdecl
--with-iconv-include=C:\Chocolatey\lib\libiconv.1.14.0.11\build\native\include
--with-iconv-lib=C:\Chocolatey\lib\libiconv.redist.1.14.0.11\build\native\bin\v110\x64\Release\dynamic\cdecl
--with-xslt-include=C:\Chocolatey\lib\libxslt.1.1.28.0\build\native\include
--with-xslt-lib=C:\Chocolatey\lib\libxslt.redist.1.1.28.0\build\native\bin\v110\x64\Release\dynamic
パスのバージョン番号が正しいことを確認する必要があります。
MicrosoftのNuGetリポジトリを追加する必要がある場合があります。
-Source "https://go.Microsoft.com/fwlink/?LinkID=230477"
MacOSでは、--with-xml2-include
へのXCode libxml2パスを明示的に提供するまで、上記/以下のいずれも実際に機能しませんでした。
gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2 --use-system-libraries
以下を実行することで、Fedora 20にNokogiri 1.6.5をインストールできました。
export NOKOGIRI_USE_SYSTEM_LIBRARIES=true
次に実行します:
gem install nokogiri
この問題が発生している他の人のために、プロジェクトディレクトリ内でこのコマンドを実行して解決しました
gem install nokogiri -- --use-system-libraries
更新:私はこれに再度遭遇し、私のために働いた宝石を更新しようとしました...
gem update nokogiri
Libxml2をインストールしようとしましたか? rubygemsからではなく、オペレーティングシステムの標準インストールプロセスから。たとえば、Ubuntu/Debianの場合:
Sudo apt-get install libxml2
OS Xの最新バージョンでは、すでにインストールされているはずです。
OSXユーザーの場合、以前にNokogiriのインストールに成功したが、たとえば、追加したRubyの新しいバージョンを使用してインストールするときにエラーが発生する場合and that次のようなメッセージを含むエラー:
The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
これは、XCodeのアップグレードがApp Storeを介して手動または自動で行われたことを示している可能性があり、それ以降は開いていません。
その場合、XCodeを開き、新しいライセンスに同意してから、Nokogiriを正常にインストールできるはずです。
Windows x64の場合:
gem inst nokogiri --pre --platform Ruby
詳細については、このスレッドを確認してください: https://github.com/sparklemotion/nokogiri/issues/864
上記の投稿に従い、次のコマンドを使用して、vagrant-aweをインストールできました。
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
Mac OS X Yosemiteでは、gemのインストール時にスーパーユーザー特権を使用しないことが経験則であるときに、Sudo gem install
を使用しようとしたことがミスでした。
私の場合、Rubyのシステムインストールを変更しようとしましたが、それは良い考えではありません。 rbenvをインストールし、Ruby 2.2.2をインストールして、global
に設定しました。これは、rbenvのドキュメントの用語です。その後、ノコギリは簡単に自分自身をインストールできます
gem install nokogiri
ハックや回避策は不要で、適切に設定された環境が必要でした。のこぎりは残りを完璧にやってくれます。
次のパッケージを実行して、Nokogiriをインストールできました。
$ dnf group install "C Development Tools and Libraries"
$ dnf install Ruby-devel libxml2-devel patch
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib
バージョンを変更します。
=== TLDR ===
指示 状態として、Rubyを最新のclangコンパイラーで、または少なくともRubygemsがNokogiriのネイティブ拡張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でコンパイルしてください。