如何用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' ... 

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

要找出失败的内容,请转到ruby gems目录。

例如:

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

安装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捆绑在一起,并在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问题, 请查看该网站 。

在CentOS这里是我需要做的:

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

由于某些原因无法创建Makefile,可能缺少必要的库和/或标头

您可能缺少-lz标志所需的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 

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