我安装了Ruby引入nokogiri宝石,并找到下面的错误。
如何诊断这个问题和解决呢?
# 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
如果你不知道你的宝石目录,试试这个:
$ 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的本地宝石往往需要的* -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
成功!
安装引入nokogiri网站
“安装引入nokogiri”是一个致力于在各大平台上安装引入nokogiri网站 - 这是关于Ubuntu的安装引入nokogiri的摘录:
由于引入nokogiri需要编译和动态对阵双方libxml2和链接的libxslt,它已经赢得了声誉被安装复杂。
作为引入nokogiri 1.6,libxml2和源的libxslt代码捆绑引入nokogiri,并在宝石安装时编译。 本文档中的说明应适用于所有版本1.6.4及更高版本。
Ubuntu的/ Debian的
安装应该只是工作™在Ubuntu和Debian使用引入nokogiri的vendored libxml2和的libxslt:
gem install nokogiri
[...]
使用系统库
如果,而不是引入nokogiri的vendored库,你想使用你的系统的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
成功。