我正在安装 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'
...
为了诊断和解决,这是对我有用的方法。
要找出失败的原因,请转到您的红宝石目录。
例如:
$ 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
我要安装什么版本的野木?
$ 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
成功!
安装Nokogiri网站
"安装 Nokogiri"是一个致力于在主要平台上安装 Nokogiri的网站 - 以下是关于在 Ubuntu 上安装 Nokogiri 的摘录:
因为Nokogiri需要编译和动态链接 无论是 libxml2 还是 libxslt,它都赢得了声誉 安装复杂。
从Nokogiri 1.6开始,libxml2和libxslt源代码与 Nokogiri,并在 gem-install-time 编译。此处的说明 文档应适用于所有版本 1.6.4 及更高版本。
Ubuntu/Debian
安装应该只在™ Ubuntu 和 Debian 上使用 Nokogiri 的 供应商的libxml2和libxslt:
gem install nokogiri
[...]
使用您的系统库
如果您想使用您的 Nokogiri 供应商库,而不是 Nokogiri 的供应商库 系统的libxml2,libxslt和相关库,请先 理解您可能要求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问题,则应查看该网站。
在 CentOS 上,我需要做的是:
gem update --system
yum install libxml2-devel libxslt-devel ruby-devel
gem install nokogiri -- --use-system-libraries
由于某种原因无法创建 Makefile,可能缺少必要的库和/或标头。
您可能缺少 zlib 标头,这是-lz
标志正确编译源代码所必需的。通过以下方式在 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
您看到的"无法创建 Makefile"错误也可能是因为您不同意 Xcode 许可证(每次更新 Xcode 后都必须同意它(。运行sudo xcodebuild -license accept
应该为您消除此错误,并允许您成功运行gem install nokogiri
。