题 如何用mkmf.log安装Nokogiri Ruby gem,说没有找到libiconv?


我正在安装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'
...

25
2017-09-09 02:53


起源




答案:


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

要找出失败的内容,请转到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原生宝石通常需要标头的* -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

成功!


57
2017-09-09 03:51



天哪,这个答案需要被提名为EVAR的最佳答案之一。您不仅提供答案,还提供了一种获得答案的方法。谢谢! - Jonathan Arkell
谢谢。这有效,但另外“检查libxml / parser.h ...没有”安装失败。然后我引用了 这一页 并应用了 gcc 如上所述的符号链接。如果错误不够详细,请检查/ gems / nokogiri-。。* / ext / nokogiri / mkmf.log获取更多见解。我还有libiconv的问题,现在建议你从源代码安装。参考 安装Nokogiri 页。 - johnsampson
如果以上所有仍然不起作用,就像它在我的ubuntu中没有,只需尝试'sudo gem install nokogiri' - osmingo
如果这也不起作用,那么卸载所有内容,rvm implode等,并使用rvm from rvm.io/rvm/install 安装红宝石和后来的铁轨 - osmingo


安装Nokogiri网站

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

因为Nokogiri需要编译和动态链接   无论是libxml2还是libxslt,它都因此而享有盛誉   安装起来很复杂。

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

Ubuntu / Debian

安装应该使用Nokogiri的Ubuntu和Debian   vendored libxml2和libxslt:

gem install 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问题,您应该这样做 看看网站


8
2018-05-24 10:53





在CentOS这里是我需要做的:

gem update --system
yum install libxml2-devel libxslt-devel ruby-devel
gem install nokogiri -- --use-system-libraries

3
2017-11-05 18:29





由于某些原因,可能无法创建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

0
2017-07-09 01:04





您看到的'无法创建Makefile'错误也可能是因为您未同意Xcode许可证(每次更新Xcode后都必须同意)。运行 sudo xcodebuild -license accept 应该为您消除此错误,然后允许您运行 gem install nokogiri 成功。


0
2017-09-25 15:31