Nokogiriのインストールが失敗する-libxml2がない


156

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/

しかし、同じエラーを返しました。

私は他のすべての関連するスタックオーバーフロー記事をフォローしましたが、どれも役に立ちませんでした。誰かが解決策を持っていますか?


1
あなたのオペレーティングシステムは何ですか?
Jake Jones

2
これはより適切な回答です-sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra '16

回答:


163

まず、依存関係をインストールします。

sudo apt-get install libxslt-dev libxml2-dev

それでもエラーが発生する場合は、コンパイラツールチェーンがない可能性があります。

sudo apt-get install build-essential

ビルドツールチェーンがない場合は、「libxml2がありません」というエラーが表示されます(少なくとも、Debian Lennyでこの問題が発生しました)。

Nokogiriビルドは、libxml2ヘッダーファイルが存在することを確認するためにテストコンパイルしますが、「libxml2がない」と「libxml2をテストするコンパイラーがない」とは区別されません。


44
それが問題でない場合は、libxml2-devをインストールする必要があるかもしれません
Erik Peterson

1
上記のコマンドを実行したところ、「libxml2が見つかりません」というエラーが発生しました。ビルドツールチェーンのインストールについて詳しく教えてください。b'cos私はそれについてあまり助けを見つけませんでした。
Rohit A. 2011

1
gcc(またはその他のコンパイラ)がインストールされていないため、このメッセージが表示されました。コンパイラツールチェーンはありませんでした。
エリックピーターソン

7
Macを使用している場合:brew install libxslt次にbrew install libxml2
Sam Backus

245

これらのパッケージの両方を実際にインストールする必要があるかもしれません

sudo apt-get install libxslt-dev libxml2-dev

7
これを評価したコメントは、どのようにして受け入れられた回答の下に位置することができますか?
新しいアレクサンドリア

3
「すべての依存関係をインストールした後でも」という質問があったからです。したがって、受け入れられた答えは正しいものです。
b0fh 2013年

62

Mac OS X(Mavericks)では、gemをインストールする前にbrewとでライブラリをNOKOGIRI_USE_SYSTEM_LIBRARIES=1インストールするのがうまくいきました。

まとめ:

  • 以前にインストールされている場合は、gemをアンインストールします。

    gem uninstall nokogiri
  • インストールするには、自作を使用しlibxml2libxsltそして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"

libiconvに関するいくつかのエラーが発生しました:「AppleはlibiconvをOS Xで配布しています。これは/ usr / libにあります。」しかし、gemインストールスクリプトをコピーするだけでうまくいきました:)ありがとう!
Automatico

ありがとうございました!午前中ずっとnokogiriをインストールしようとした後、(特に構成パスを使用した)回答が最終的に機能しました-パスが正しい場合でも、libxml2が存在しないと(かなり役に立たない)インストールではなく、
Pebbl 2015

2
OS Xでbrewの代わりにポートを使用$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiriし、そのまま行っただけで問題が解決しました
AndresKüttSep

2
OSX El Capitan 10.11.2では、brew install libxml2 libxslt homebrew/dupes/libiconvそれを機能させるために使用する必要がありました
Hai Feng Kao

2
さらに、コマンドを機能させる--with-xml2-include="/usr/local/opt/libxml2/include/libxml2"ために追加する必要がありgem install nokogiriます。それ以外の場合は表示されますlibxml2 version 2.6.21 or later is required!(私のlibxml2バージョンは2.9.2です)
Hai Feng Kao

22

Fedora 13で同じ問題が発生しました。イライラして失敗した検索の結果、

gem install nokogiri

私のために動作し、それをインストールしてlibxml2エラーを回避することができましたyum

コマンドの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

私のRVM環境ではなく、Rubyのすべての宝石と依存関係をシステムに取り込みます。私の経験では、非常に苛立たしい謙虚な体験につながります。

だから、あなたが使用できるNokogiri yum gemを見つけてください:

yum provides  rubygem-nokogiri

欠落しているライブラリーを示したrubygem-Nokogiriの依存関係のリストを取得します。その後私は走った:

yum install libxml2-devel libxslt libxslt-devel

NokogiriがFedoraでコンパイルされ、Nokogiriがインストールされます。D'oh!、develライブラリからNokogiriをコンパイルするためのヘッダーが必要です。


これは私にとってはうまくいきましたが、ubuntuではapt-get install libnokogiri-ruby1.9.1を使用し、Gemfileを編集して、1.5.9ではなくnokogiri 1.5.5を要求する必要がありました
ffflabs

13

Mac OS X(Mavericks)では、これらの解決策のいずれも機能しない場合は、以下を試してください。

ARCHFLAGS="-arch x86_64" gem install nokogiri

または

ARCHFLAGS="-arch i386" gem install nokogiri

システムのアーキテクチャによって異なります。


13

通常、gemをビルドするには開発ファイルが必要です。試してください:

sudo apt-get install libxslt-dev libxml2-dev

(Ericがコメントで同じことを提案しているのを見たところです。)


11

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"

「パッケージlibxml2が見つかりません」が表示されます。Chocolatelyにはどのようなソースがありますか?
Isaac Waller 14年

3
問題が見つかりました!ChocolateyのソースファイルでNugetソースが無効になりました!しかし、gemは機能しません:[tid-1789500] 126:指定されたモジュールが見つかりませんでした。-C:/Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so(LoadError)
Ratko Stibric 14年

@RatkoStibric動的ライブラリでビルドする必要があると思います:...\x64\Release\dynamic\cdecl
クロエ

1
chocolatelyインストールしたら、次のコマンドを使用して、ソースを追加しますchocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
リチャード・ペック

1
Chocolateyに感謝します。そのことをこれまでに知りませんでした。
Richard Peck


6

macOSでは、XCode libxml2パスをに明示的に指定するまで、上/下のどれも実際には機能しませんでした--with-xml2-include

gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2 --use-system-libraries

4

Fedora 20にNokogiri 1.6.5をインストールすることができました:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

次に実行します:

gem install nokogiri

4

この問題が発生している他の人のために、私はプロジェクトディレクトリ内でこのコマンドを実行することで解決しました

gem install nokogiri -- --use-system-libraries

更新:私はこれに再度遭遇し、私のために働いた宝石を更新しようとしました...

gem update nokogiri


2

libxml2をインストールしてみましたか?rubygemsからではなく、オペレーティングシステムの標準インストールプロセスを介して。たとえば、Ubuntu / Debianの場合:

sudo apt-get install libxml2

OS Xの最近のバージョンでは、すでにインストールされているはずです。


私はubuntuを使用しており、他のstackoverflowの質問で述べられているように、上記のインストールをすべて実行しました。
Rohit A. 2011

1

OSXのユーザーのために、あなたが前に鋸山のインストールの成功を持っていた、まだ上にインストールし、エラーを取得している場合は、あなたが追加したことをRubyの新しいバージョンの使用して、と言うと、のようなメッセージが含まれているエラー:

The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.

これは、App Storeを介して手動または自動でXCodeのアップグレードが行われ、その後、それを開いていないことを示している可能性があります。

その場合は、XCodeを開き、新しいライセンスに同意してから、Nokogiriを正常にインストールできます。


1

Mac OS X Yosemiteで私の間違いは私が使用しようとしたことでした sudo gem install gemをインストールするときにスーパーユーザー特権を使用しないことが大体の場合たことです。

私の場合、Rubyのシステムインストールを変更しようとしましたが、それは良い考えではありません。私はrbenvをインストールし、それを介してRuby 2.2.2をインストールしてglobal、として設定しました。これは、rbenvのドキュメントの用語です。その後、ノコギリは簡単な方法でインストールできます

gem install nokogiri

ハッキングや回避策は必要ありません。適切に設定された環境だけです。ノコギリは残りを完璧に行います。


使い方はsudoOKであるのIFあなたはそれがどのように動作するかを理解し、それを有効にするために起こっている理由をインストールまたは更新されたファイルをインストールする必要があり、そしてどのようにそれが失敗した場合のアクションを元に戻します。それ以外の場合は、rbenvやRVMのようなサンドボックスを使用することは本当に良いアイデアです。
Tin Man、

1

上記の投稿に従ってvagrant-aweをインストールできましたが、次のコマンドを使用しました:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws


0

次のパッケージを実行することでNokogiriをインストールできました。

$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch

0

=== TLDR ===

指示として状態、最新打ち鳴らすコンパイラでビルドルビー、またはRubygemsのコンパイルに使用すること、少なくとも同じバージョン鋸山のネイティブエクステンションは、のlibxmlとlibxsl。

RVMを使用している場合、--with-ggc=clangフラグを使用してソースからビルドすることが私のためにそれを行いました:

rvm install 2.2 --with-gcc=clang

2.2任意のバージョンに置き換えます。--with-gcc=clangRVMがソースからビルドされることを保証し、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でコンパイルしていることを確認してください。


0
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

それを使ってバージョンを変更してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.