web-dev-qa-db-ja.com

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

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の記事をすべてフォローしましたが、何も助けませんでした。誰にも解決策がありますか?

153
Rohit A.

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

Sudo apt-get install libxslt-dev libxml2-dev

それでもエラーが表示される場合は、コンパイラツールチェーンが欠落している可能性があります。

Sudo apt-get install build-essential

ビルドツールチェーンが欠落している場合、「libxml2が欠落しています」というエラーが表示されます(少なくともDebian Lennyでこの問題に遭遇しました)。

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

156
Erik Peterson

これらのパッケージの両方を実際にインストールする必要がある場合があります

Sudo apt-get install libxslt-dev libxml2-dev
244
Ryan

Mac OS X(Mavericks)では、gemをインストールする前にbrewを使用してライブラリをインストールし、NOKOGIRI_USE_SYSTEM_LIBRARIES=1を設定してくれました。

要約:

  • 以前にインストールした場合は、gemをアンインストールします。

    gem uninstall nokogiri
    
  • Homebrewを使用して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"
    
58
Eduardo

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をコンパイルするにはヘッダーが必要です。

21
Sojoodi

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

Sudo apt-get install libxslt-dev libxml2-dev

(エリックがコメントで同じことを提案したのを見たところです。)

13
pduersteler

Mac OS X(Mavericks)で、これらのソリューションがどれも機能しない場合は、以下を試してください:

ARCHFLAGS="-Arch x86_64" gem install nokogiri

または

ARCHFLAGS="-Arch i386" gem install nokogiri

システムのアーキテクチャに依存します。

12
rilla

そうなる:

Sudo yum install -y libxml2 libxml2-devel

rHELサーバー上。

11
hohner

これを 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"
11
Chloe

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
5
sobstel

以下を実行することで、Fedora 20にNokogiri 1.6.5をインストールできました。

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

次に実行します:

gem install nokogiri
4
Simone

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

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

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

gem update nokogiri

4
Jbur43

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

Sudo apt-get install libxml2

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

2
d11wtq

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を正常にインストールできるはずです。

1
Paul Fioravanti

Windows x64の場合:

gem inst nokogiri --pre --platform Ruby

詳細については、このスレッドを確認してください: https://github.com/sparklemotion/nokogiri/issues/864

1
magiccrafter

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

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
1
Romi

Mac OS X Yosemiteでは、gemのインストール時にスーパーユーザー特権を使用しないことが経験則であるときに、Sudo gem installを使用しようとしたことがミスでした。

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

gem install nokogiri

ハックや回避策は不要で、適切に設定された環境が必要でした。のこぎりは残りを完璧にやってくれます。

1
Aleks N.

次のパッケージを実行して、Nokogiriをインストールできました。

$ dnf group install "C Development Tools and Libraries"
$ dnf install Ruby-devel libxml2-devel patch
0
user1455180
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

バージョンを変更します。

0
Liber

=== 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でコンパイルしてください。

0
Johnster