我正在安装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'
...
最佳答案
要诊断和解决,这对我有用。
要找出失败的原因,请转到您的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包作为 header ,因此请安装它们:
$ 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
成功!