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

为了诊断和解决,这对我有用。

要找出失败的原因,请转到您的 ruby​​ gems 目录。

例如:

$ 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
...

安装开发包:

$ 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

安装 Nokogiri 网站

'Installing Nokogiri' 是一个致力于在主要平台上安装 Nokogiri 的网站 - 以下是关于在 Ubuntu 上安装 Nokogiri 的摘录:

因为 Nokogiri 需要针对 libxml2 和 libxslt 进行编译和动态链接,所以它以安装复杂而闻名。

从 Nokogiri 1.6 开始,libxml2 和 libxslt 源代码与 Nokogiri 捆绑在一起,并在 gem-install-time 编译。本文档中的说明适用于所有版本 1.6.4 及更高版本。

Ubuntu / Debian

使用 Nokogiri 提供的 libxml2 和 libxslt 在 Ubuntu 和 Debian 上安装应该是 Just Work™:

gem install nokogiri

[...]

使用您的系统库

如果您想使用系统的 libxml2、libxslt 和相关库而不是 Nokogiri 的供应商库,请首先了解您可能要求 Nokogiri 使用不受支持的 libxml2 版本。

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

仅供参考 - 我正在使用 Nokogiri 1.6.6.2,但它并没有“正常工作”。我得到了它--use-system-libraries


Mac OS X

该网站的建议还涵盖 OS X - 这对我有用:
gem update --system xcode-select --install gem install nokogiri


结论

如果您在任何平台上遇到 Nokogiri 问题,您应该查看网站

于 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为了正确编译源代码,您可能缺少 flag 所需的 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 回答