首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用mkmf.log安装Nokogiri Ruby gem,说没有找到libiconv?

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

Stack Overflow用户
提问于 2012-09-09 10:53:08
回答 5查看 33K关注 0票数 31

我正在安装Ruby Nokogiri gem并找到下面的错误。

如何诊断和解决这个问题?

代码语言:javascript
复制
# 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'
...
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-09 11:51:22

为了诊断和解决问题,以下是对我有效的方法。

要找出失败的原因,请转到ruby gems目录。

例如:

代码语言:javascript
复制
$ cd <MY RUBY DIRECTORY>/lib/ruby/gems/2.0.0/gems

如果你不知道你的gem目录,试试这个:

代码语言:javascript
复制
$ echo $GEM_HOME
/opt/gems/2.0.0
$ cd /opt/gems/2.0.0/gems

我要安装什么版本的nokogiri?

代码语言:javascript
复制
$ ls -ladg nokogiri-*
nokogiri-1.5.5

转到安装程序目录:

代码语言:javascript
复制
$ cd nokogiri-1.5.5/ext/nokogiri

尝试手动安装:

代码语言:javascript
复制
$ ruby extconf.rb

结果:

代码语言:javascript
复制
checking for libxml/parser.h... *** extconf.rb failed ***
...

我使用的是Ubuntu,所以我会搜索任何类似的包:

代码语言:javascript
复制
$ aptitude search libxml

结果:

代码语言:javascript
复制
p libxml2 - GNOME XML library
p libxml2-dev - Development files for the GNOME XML library
...

我相信libxml2会工作得很好。

代码语言:javascript
复制
$ apt-get install libxml2

Ruby原生gem通常需要*-dev包作为头文件,所以安装它们:

代码语言:javascript
复制
$ apt-get install libxml2-dev

现在我有解析器文件了吗?

代码语言:javascript
复制
$ find / | grep libxml/parser.h

是的,结果显示了解析器:

代码语言:javascript
复制
/usr/include/libxml2/libxml/parser.h

现在再次尝试安装,这次提供libxml2路径:

代码语言:javascript
复制
$ gem install nokogiri -- --with-xml2-dir=/usr/include/libxml2

它仍然失败,所以请阅读mkmf错误日志:

代码语言:javascript
复制
$ more mkmf.log 

错误日志显示失败的原因,并显示以下几行看起来很有希望:

代码语言:javascript
复制
package configuration for libxslt is not found

有打包的东西吗?

代码语言:javascript
复制
$ aptitude search libxslt

结果:

代码语言:javascript
复制
v   libxslt-dev
i   libxslt-ruby
...

安装dev包:

代码语言:javascript
复制
$ apt-get install libxslt-dev

现在再次尝试安装,并将xslt放在路径中:

代码语言:javascript
复制
$ gem install nokogiri -- \
--with-xml2-dir=/usr/include/libxml2 \
--with-xslt-dir=/usr/include/libxslt

成功!

票数 66
EN

Stack Overflow用户

发布于 2015-05-24 18:53:37

Installing Nokogiri Website

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

由于

需要针对libxml2和libxslt进行编译和动态链接,因此它以安装复杂而闻名。

从Nokogiri1.6开始,libxml2和libxslt源代码与Nokogiri捆绑在一起,并在gem-install-time编译。本文档中的说明应适用于所有版本1.6.4及更高版本。

Debian Ubuntu/

使用Nokogiri提供的libxml2和libxslt,安装应该只在Ubuntu和Debian上运行™:

gem安装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 -这对我很有效:

gem update --system xcode-select --install gem install nokogiri

结论

如果你在任何平台上遇到Nokogiri的问题,你应该使用check out the website

票数 11
EN

Stack Overflow用户

发布于 2015-11-06 02:29:54

在CentOS上,我需要这样做:

代码语言:javascript
复制
gem update --system
yum install libxml2-devel libxslt-devel ruby-devel
gem install nokogiri -- --use-system-libraries
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12336160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档