33

Ruby Nokogiri gemをインストールして、以下のエラーを見つけました。

これを診断して解決する方法は?

# gem install nokogiri
Building native extensions.  This could take a while...
ERROR:  Error installing nokogiri:
ERROR: Failed to build gem native extension.
...
/opt/ruby/1.9.3-p194/bin/ruby extconf.rb
checking for libxml/parser.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.
...
/opt/ruby/1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': 
The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /opt/ruby/1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:506:in `try_cpp'
...
4

5 に答える 5

66

診断して解決するために、これが私のために働いたものです。

何が失敗したかを見つけるには、rubygemsディレクトリに移動してください。

例えば:

$ cd <MY RUBY DIRECTORY>/lib/ruby/gems/2.0.0/gems

gemディレクトリがわからない場合は、次のことを試してください。

$ echo $GEM_HOME
/opt/gems/2.0.0
$ cd /opt/gems/2.0.0/gems

どのバージョンのnokogiriをインストールしていますか?

$ ls -ladg nokogiri-*
nokogiri-1.5.5

インストーラーディレクトリに移動します。

$ cd nokogiri-1.5.5/ext/nokogiri

手動でインストールしてみてください。

$ ruby extconf.rb

結果:

checking for libxml/parser.h... *** extconf.rb failed ***
...

私はUbuntuを使用しているので、同様のパッケージを検索します。

$ aptitude search libxml

結果:

p libxml2 - GNOME XML library
p libxml2-dev - Development files for the GNOME XML library
...

libxml2は問題なく動作すると思います。

$ apt-get install libxml2

Rubyネイティブgemは、ヘッダー用に* -devパッケージを必要とすることが多いので、それらをインストールします。

$ apt-get install libxml2-dev

これでパーサーファイルはありますか?

$ find / | grep libxml/parser.h

はい、結果はパーサーを示しています。

/usr/include/libxml2/libxml/parser.h

ここで、もう一度インストールしてみてください。今回はlibxml2パスを指定します。

$ gem install nokogiri -- --with-xml2-dir=/usr/include/libxml2

それでも失敗するので、mkmfエラーログを読んでください。

$ more mkmf.log 

エラーログには何が失敗したかが示され、有望に見える次の行があります。

package configuration for libxslt is not found

そのためのパッケージはありますか?

$ aptitude search libxslt

結果:

v   libxslt-dev
i   libxslt-ruby
...

devパッケージをインストールします。

$ apt-get install libxslt-dev

ここで、もう一度インストールしてみてください。また、パスにxsltを配置してください。

$ gem install nokogiri -- \
--with-xml2-dir=/usr/include/libxml2 \
--with-xslt-dir=/usr/include/libxslt

成功!

于 2012-09-09T03:51:22.273 に答える
12

NokogiriWebサイトのインストール

「InstallingNokogiri」は、主要なプラットフォームへのNokogiriのインストール専用のWebサイトです-UbuntuへのNokogiriのインストールに関する抜粋は次のとおりです。

Nokogiriはコンパイルして、libxml2とlibxsltの両方に対して動的にリンクする必要があるため、インストールが複雑であるという評判を得ています。

Nokogiri 1.6以降、libxml2およびlibxsltソースコードはNokogiriにバンドルされており、gem-install-timeでコンパイルされます。このドキュメントの手順は、すべてのバージョン1.6.4以降で機能するはずです。

Ubuntu / Debian

インストールは、Nokogiriのベンダーのlibxml2とlibxsltを使用してUbuntuとDebianにJustWork™する必要があります。

gem install nokogiri

[...]

システムライブラリの使用

Nokogiriのベンダーライブラリの代わりに、システムのlibxml2、libxslt、および関連ライブラリを使用する場合は、サポートされていないバージョンのlibxml2を使用するようにNokogiriに要求している可能性があることを最初に理解してください。

sudo apt-get install pkg-config
gem install nokogiri -- --use-system-libraries

参考までに-私はNokogiri1.6.6.2を使用していますが、「うまく機能しませんでした」。私はそれをうまくやった--use-system-libraries


Mac OS X

ウェブサイトのアドバイスはOSXもカバーしています-これは私にとってはうまくいきました:
gem update --system xcode-select --install gem install nokogiri


結論

いずれかのプラットフォームでNokogiriの問題が発生した場合は、Webサイトを確認する必要があります。

于 2015-05-24T10:53:36.660 に答える
4

CentOSでは、次のことを行う必要があります。

gem update --system
yum install libxml2-devel libxslt-devel ruby-devel
gem install nokogiri -- --use-system-libraries
于 2015-11-05T18:29:53.610 に答える
3

何らかの理由でMakefileを作成できませんでした。おそらく、必要なライブラリやヘッダーが不足しています。

-lzソースを正しくコンパイルするためにフラグに必要なzlibヘッダーが欠落している可能性があります。Linuxにインストールする方法:

sudo apt-get install libz-dev

libiconvが見つからない場合は、libiconv-hook-devヘッダーファイルが次のようなパッケージをインストールしてみてください。libiconv-hook

sudo apt-get install libiconv-hook1 libiconv-hook-dev

OS Xでは、次の方法で開発ツールをインストールしてみてくださいxcode-select --install

それでも問題が解決しない場合は、mkmf.logファイルでエラーの詳細を確認してください。


Ubuntuでは、次の依存関係修正コンボを試してください。

sudo apt-get install gcc ruby-dev libxslt-dev libxml2-dev zlib1g-dev
于 2016-07-09T01:04:46.497 に答える
2

表示されている「Makefileを作成できませんでした」エラーは、Xcodeライセンスに同意していないことが原因である可能性もあります(Xcodeを更新するたびに同意する必要があります)。実行sudo xcodebuild -license acceptすると、このエラーが解消され、正常に実行できるようになりますgem install nokogiri

于 2017-09-25T15:31:14.337 に答える