【问题标题】:How to install Nokogiri Ruby gem with mkmf.log saying libiconv not found?如何使用 mkmf.log 安装 Nokogiri Ruby gem 说 libiconv 未找到?
【发布时间】:2012-09-02 09:40:24
【问题描述】:

我正在安装 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 gem installation nokogiri


    【解决方案1】:

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

    要找出失败的原因,请转到您的 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 包作为标头,因此请安装它们:

    $ 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
    

    成功了!

    【讨论】:

    • 天哪,这个答案需要被提名为EVAR的最佳答案之一。您不仅提供了答案,而且还提供了获得答案的方法。谢谢!
    • 谢谢。这行得通,但出现了额外的“检查 libxml/parser.h ... 否”安装失败。然后我引用了this page 并应用了gcc 符号链接,如上所述。如果错误不够详细,请检查 /gems/nokogiri-..*/ext/nokogiri/mkmf.log 以获得更多信息。我还遇到了 libiconv 的问题,现在建议您从源代码安装。参考Installing Nokogiri 页面。
    • 如果上述所有方法仍然不起作用,就像我的 ubuntu 中没有,只需尝试 'sudo gem install nokogiri'
    • 如果这也不起作用,然后卸载所有东西,rvm implode 等,并使用来自rvm.io/rvm/install 的 rvm 安装 ruby​​ 和之后的 rails
    【解决方案2】:

    Installing Nokogiri Website

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

    因为 Nokogiri 需要编译和动态链接 libxml2 和 libxslt,它都以 安装复杂。

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

    Ubuntu / Debian

    在 Ubuntu 和 Debian 上使用 Nokogiri 的安装应该 Just Work™ 出售 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 问题,您应该check out the website

    【讨论】:

      【解决方案3】:

      在 CentOS 上,这是我需要做的:

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

      【讨论】:

        【解决方案4】:

        由于某种原因无法创建 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
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-24
            • 1970-01-01
            • 2022-06-24
            • 1970-01-01
            • 2013-04-11
            • 1970-01-01
            相关资源
            最近更新 更多