nokogiri gem installation error

Posted

技术标签:

【中文标题】nokogiri gem installation error【英文标题】: 【发布时间】:2014-08-06 17:43:47 【问题描述】:

我知道有很多关于这个宝石的问题,但没有任何答案对我有用。

当我在 SSH gem install nokogiri 中运行时,我收到此错误:

Extracting libxml2-2.8.0.tar.gz into tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.8.0... OK
Running patch with /home/user58952277/.gem/ruby/1.9.3/gems/nokogiri-1.6.2.1/ports/patches/libxml2/0001-Fix-parser-local-buffers-size-problems.patch...
Running 'patch' for libxml2 2.8.0... ERROR, review 'tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.8.0/patch.log' to see what happened.
*** 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.

我的主机告诉我所有库都已安装。 以下是执行 install nokogiri 命令后的完整日志:

Building native extensions.  This could take a while...
Building nokogiri using packaged libraries.
Building libxml2-2.8.0 for nokogiri with the following patches applied:
    - 0001-Fix-parser-local-buffers-size-problems.patch
    - 0002-Fix-entities-local-buffers-size-problems.patch
    - 0003-Fix-an-error-in-previous-commit.patch
    - 0004-Fix-potential-out-of-bound-access.patch
    - 0005-Detect-excessive-entities-expansion-upon-replacement.patch
    - 0006-Do-not-fetch-external-parsed-entities.patch
    - 0007-Enforce-XML_PARSER_EOF-state-handling-through-the-pa.patch
    - 0008-Improve-handling-of-xmlStopParser.patch
    - 0009-Fix-a-couple-of-return-without-value.patch
    - 0010-Keep-non-significant-blanks-node-in-html-parser.patch
    - 0011-Do-not-fetch-external-parameter-entities.patch
************************************************************************
IMPORTANT!  Nokogiri builds and uses a packaged version of libxml2.

If this is a concern for you and you want to use the system library
instead, abort this installation process and reinstall nokogiri as
follows:

    gem install nokogiri -- --use-system-libraries

If you are using Bundler, tell it to use the option:

    bundle config build.nokogiri --use-system-libraries
    bundle install

However, note that nokogiri does not necessarily support all versions
of libxml2.

For example, libxml2-2.9.0 and higher are currently known to be broken
and thus unsupported by nokogiri, due to compatibility problems and
XPath optimization bugs.
************************************************************************
ERROR:  Error installing nokogiri:
    ERROR: Failed to build gem native extension.

        /opt/rubies/ruby-1.9.3/bin/ruby extconf.rb
Building nokogiri using packaged libraries.
checking for iconv.h... yes
checking for iconv_open() in iconv.h... yes
Building libxml2-2.8.0 for nokogiri with the following patches applied:
    - 0001-Fix-parser-local-buffers-size-problems.patch
    - 0002-Fix-entities-local-buffers-size-problems.patch
    - 0003-Fix-an-error-in-previous-commit.patch
    - 0004-Fix-potential-out-of-bound-access.patch
    - 0005-Detect-excessive-entities-expansion-upon-replacement.patch
    - 0006-Do-not-fetch-external-parsed-entities.patch
    - 0007-Enforce-XML_PARSER_EOF-state-handling-through-the-pa.patch
    - 0008-Improve-handling-of-xmlStopParser.patch
    - 0009-Fix-a-couple-of-return-without-value.patch
    - 0010-Keep-non-significant-blanks-node-in-HTML-parser.patch
    - 0011-Do-not-fetch-external-parameter-entities.patch
************************************************************************
IMPORTANT!  Nokogiri builds and uses a packaged version of libxml2.

If this is a concern for you and you want to use the system library
instead, abort this installation process and reinstall nokogiri as
follows:

    gem install nokogiri -- --use-system-libraries

If you are using Bundler, tell it to use the option:

    bundle config build.nokogiri --use-system-libraries
    bundle install

However, note that nokogiri does not necessarily support all versions
of libxml2.

For example, libxml2-2.9.0 and higher are currently known to be broken
and thus unsupported by nokogiri, due to compatibility problems and
XPath optimization bugs.
************************************************************************
Extracting libxml2-2.8.0.tar.gz into tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.8.0... OK
Running patch with /home/user58952277/.gem/ruby/1.9.3/gems/nokogiri-1.6.2.1/ports/patches/libxml2/0001-Fix-parser-local-buffers-size-problems.patch...
Running 'patch' for libxml2 2.8.0... ERROR, review 'tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.8.0/patch.log' to see what happened.
*** 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.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=$opt-dir/include
    --with-opt-lib
    --without-opt-lib=$opt-dir/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/opt/rubies/ruby-1.9.3/bin/ruby
    --help
    --clean
    --use-system-libraries
    --enable-static
    --disable-static
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=$zlib-dir/include
    --with-zlib-lib
    --without-zlib-lib=$zlib-dir/lib
    --enable-cross-build
    --disable-cross-build
/home/user58952277/.gem/ruby/1.9.3/gems/mini_portile-0.6.0/lib/mini_portile.rb:279:in `block in execute': Failed to complete patch task (RuntimeError)
    from /home/user58952277/.gem/ruby/1.9.3/gems/mini_portile-0.6.0/lib/mini_portile.rb:271:in `chdir'
    from /home/user58952277/.gem/ruby/1.9.3/gems/mini_portile-0.6.0/lib/mini_portile.rb:271:in `execute'
    from extconf.rb:282:in `block in patch'
    from extconf.rb:279:in `each'
    from extconf.rb:279:in `patch'
    from /home/user58952277/.gem/ruby/1.9.3/gems/mini_portile-0.6.0/lib/mini_portile.rb:108:in `cook'
    from extconf.rb:253:in `block in process_recipe'
    from extconf.rb:154:in `tap'
    from extconf.rb:154:in `process_recipe'
    from extconf.rb:419:in `<main>'

【问题讨论】:

听起来 /tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.8.0/patch.log 中有更多信息 我还会检查 mkmf.log 文件以了解更多详细信息。 上面写着/opt/rubies/ruby-1.9.3/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. 所以它们并没有像我的主人所说的那样安装,对吧? 正确,看来你需要一个编译器。 【参考方案1】:

2020 年 4 月 6 日更新:

ma​​cOS Catalina 10.15

gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/libxml2/

ma​​cOS Mojave 10.14

gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/libxml2/

ma​​cOS High Sierra 10.13

gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/libxml2/

ma​​cOS Sierra 10.12:

gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/libxml2/

OS X El Capitan 10.11

gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2/

如果您没有权限,请考虑添加sudo


出于某种原因,Apple 的 Yosemite 版本的 OSX 没有系统可访问的 libxml2 安装。 Nokogiri 需要它来编译,幸运的是 Xcode 捆绑了一个 libxml2 版本——我们只需要在安装 gem 时指定它。正确安装 Nokogiri 很重要,因为目前 Rails 4.2.1.rc4 会自动尝试安装它,您会感到痛苦。

Checkout this post for more info.

【讨论】:

谢谢,找这个很久了。 是的,这对我有用,但接受的答案没有。我正在运行 El Capitan 这应该是正确的答案。赞成。请注意,对于 Mac OS Sierra v.10.12 用户,您需要将命令更改为: gem install nokogiri -- --use-system-libraries --with-xml2-include=/Applications/Xcode.app/Contents/Developer/ Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/libxml2/ 即使我使用的是 macOS Sierra,我仍然需要使用 "gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode. app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2/" 使其工作的路径。 使用建议的 macOS Sierra 并获得 sudo 权限,然后让我安装 nokogiri 和 rails。非常感谢。【参考方案2】:

最后,问题是由 nokogiri 本身引起的,因为它发布了与某些系统不兼容的自己的 libxml2。 所以要安装 nokogiri 我必须告诉它它应该使用系统库。

我是手动安装的:

gem install nokogiri -v 1.6.2.1 -- --use-system-libraries

而且效果很好。其他答案没有解决。

【讨论】:

我删除了带有版本细节的 -v,它解决了类似的问题。 同时使用 Ubuntu 14.04 :) Ubuntu 15.10 上的另一个(作弊?)解决方案:sudo apt install ruby​​-nokogiri @FrédéricGrosshans 对 rvm/rbenv 用户的糟糕解决方案 这最终成为我启动和运行环境的关键——我在新的 mac M1 芯片上使用 rbenv 和 bundler。我安装了一些适用于我的盒子(V8 等)的特殊系统库,然后使用版本手动安装每个 gem(nokogiribcryptmini_racerrinku 等)指定和-- --use-system-libraries。这显然不是理想的(也许不推荐),但它现在是一个功能性的工作。【参考方案3】:

由于未列出的构建依赖项,我遇到了同样的问题。当我找到有问题的 tmp 目录时:

find ~/.rbenv/ -name patch.log

它说:

sh:补丁:找不到命令

用一个简单的方法解决了这个问题:

sudo yum install -y patch

【讨论】:

这帮助我在 Amazon Linux 上安装了 Nokogiri!【参考方案4】:

在 OSX Yosemite 上,我在终端中执行了xcode-select --install。之后,bundle 与该 gem 配合得很好。

【讨论】:

这对我有用,我以为我已经安装了开发人员工具,但我想不是,谢谢 也为我工作。我升级到 OS X El Capitan 并且必须获得最新的 xcode 开发工具 xcode-select --install 我认为每次操作系统升级后都需要完成。在我升级到 Sierra 后为我工作。【参考方案5】:

这适用于 Windows 7 Home Basic 64 位:

gem install nokogiri -v 1.6.2.1 -- --use-system-libraries

【讨论】:

【参考方案6】:

当前答案中的任何内容都不适合我(我使用的是 Ubuntu 16.04,而不是 Mac)。

但是,按照Nokogiri site 中的说明,这部分成功了:

# See http://www.nokogiri.org/tutorials/installing_nokogiri.html#ubuntu___debian
sudo apt-get install build-essential patch
sudo apt-get install ruby-dev zlib1g-dev liblzma-dev

请注意,我自 2009 年以来一直在使用 Nokogiri,但我一直无法安装它。任何进一步的评论都可能不符合 SO T&Cs :)

【讨论】:

【参考方案7】:

这对我来说适用于 OS X Yosemite。

gem install nokogiri -v 1.6.5 -- --use-system-libraries

【讨论】:

【参考方案8】:

在 Mac OS El Capitan 中安装 Nokogiri:

brew install libxml2 bundle config build.nokogiri "--use-system-libraries --with-xml2-include=/usr/local/opt/libxml2/include/libxml2"

bundle install

它对我有用:)

【讨论】:

这在 OSX Yosemite 上对我有用。其他答案均无效。谢谢!【参考方案9】:

在我运行之前,Nokogiri 没有在我的 OSX Sierra 机器上找到 Xcode 库:

sudo xcodebuild -license accept

【讨论】:

这对我来说是个问题。我之前已经同意 CLI 工具,但我刚刚通过app store.app progrom 更新了它。我在文件mkmf.log 中找到了一个提示,我的错误输出中提到了该提示。检查文件后,我发现有一条错误消息:Agreeing to the Xcode/ios license requires admin privileges, please run “sudo xcodebuild -license” and then retry this command.。之后 Nokogiri 可以安装而不会出错。【参考方案10】:

这在 OS X 10.10.3 Yosemite 上对我有用:

sudo gem install nokogiri -- --use-system-libraries --with-xslt-dir=/usr/local/opt/libxslt --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/libxml2 --with-xml2-lib=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib

【讨论】:

【参考方案11】:

就像wongzigii 说安装命令与 macOS Sierra 中的这些标志一起使用

gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/libxml2/

【讨论】:

【参考方案12】:

我费力地想通了这一点,并花了几个小时跟踪面包屑并阅读人们正在尝试的内容。没有任何帮助。这个溢出页面上的所有内容都没有帮助,所以这就是我解决这个问题的方法:

如果您将您的机器用于不在ruby 中的其他开发项目。您可能想要检查其他语言的包管理器安装。更重要的是 - 您可能想要检查其他 c 编译器安装 - 即 clang

在我的例子中 - 我已经安装了 anaconda/conda(python) 并且这替换了我的 .bash_profile 中的一堆路径以使用 clang 作为主要的 c 编译器,而 xcode command line toolsrebenv 都在使用 gcc之前通过 Homebrew 安装。

我删除了anaconda(using anaconda-clean)clang 安装,然后尝试捆绑。那是我收到missing libxml2 问题的时候。然后我通过自制程序REINSTALLED libxml2 确保符号链接将通过homebrew 重做,并按照随后的说明将适当的export flags 添加到我的~/bash_profile 文件中。

现在已成功捆绑。原因是,现在这些 gem 与我用于该项目的 ruby​​ 版本捆绑在一起的编译器。

对于像我们中的许多人这样的多语言开发机器来说,Docker 会让这不是问题。

所以请注意。

【讨论】:

【参考方案13】:

这对我有用:

sudo gem install nokogiri -v 'versionNumber'  -- --use-system-libraries --with-xslt-dir=/usr/local/opt/libxslt --with-xml2-include=/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2 --with-xml2-lib=/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib

【讨论】:

【参考方案14】:

第 1 步:

brew install libxml2

第 2 步:

bundle config build.nokogiri --use-system-libraries

第 3 步: 那就试试吧

捆绑安装

【讨论】:

【参考方案15】:

最后经过一番努力,以下对我有用(OS X 10.8.5,macports)。 (我正在安装 github 页面,即 jekyll)

/opt/local/bin/gem install nokogiri -v 1.6.6.2 -- --use-system-libraries --with-xslt-dir=/usr/local/opt/libxslt --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/libxml2 --with-xml2-lib=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib 

【讨论】:

【参考方案16】:

就我而言,我使用的是 Mac OSX Mojave,并且必须安装此处描述的软件包:https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes#3035624

这是包的路径: /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

安装后,安装完成,没有问题。

【讨论】:

【参考方案17】:

如果使用捆绑器,请先运行此命令:

bundle config build.nokogiri --use-system-libraries

【讨论】:

【参考方案18】:

我正在使用 macOS Sierra。

查看 nokogiri 文档并遵循以下内容:

在 MAC OSX 上

使用 Nokogiri 提供的 libxml2 和 libxslt 安装应该 Just Work™。

首先,确保您拥有最新版本的 RubyGems 和 xcode 命令行工具:

1 gem update --system

2xcode-select --install

然后安装 nokogiri:

1 gem install nokogiri

【讨论】:

以上是关于nokogiri gem installation error的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Gemfile “gem install nokogiri -- --use-system-libraries”

当我运行bundle install时,Nokogiri'无法构建gem native extension'

LoadError:库版本不兼容 - /home/ubuntu/.rvm/gems/ruby-2.3.1@lm5/gems/nokogiri-1.8.2/lib/nokogiri/nokogiri.s

安装 ruby​​ gem nokogiri 时缺少 libxslt

Rails -nokogiri GEM:检测 URL 中图像的 MIME 类型

安装 nokogiri (1.10.10) 时出错,Bundler 无法继续