Nokogiri 安装失败 -libxml2 丢失

Posted

技术标签:

【中文标题】Nokogiri 安装失败 -libxml2 丢失【英文标题】:Nokogiri installation fails -libxml2 is missing 【发布时间】:2011-09-10 18:30:33 【问题描述】:

我总是按照“Installing Nokogiri”教程中的文档来解决 Nokogiri 安装问题。

但这一次,即使安装了所有依赖项,Nokogiri 也没有安装。我收到以下错误:

libxml2 is missing.  please visit <http://nokogiri.org/tutorials/installing_nokogiri.html>

我尝试通过指定 libxml2 和 libxslt 目录来安装它:

sudo gem install nokogiri -- --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-dir=/usr/

但它返回了同样的错误。

我关注了所有其他相关的 Stack Overflow 文章,但没有任何帮助。有人有解决办法吗?

【问题讨论】:

你的操作系统是什么? 这是更恰当的答案 - sudo apt-get install libxslt-dev libxml2-dev 【参考方案1】:

您实际上可能需要安装这两个软件包

sudo apt-get install libxslt-dev libxml2-dev

【讨论】:

如何评价这个高度的评论低于接受的答案? 因为问题指出“即使在安装了所有依赖项之后”。所以接受的答案是正确的。【参考方案2】:

首先,安装依赖:

sudo apt-get install libxslt-dev libxml2-dev

如果您仍然收到错误,您可能缺少编译器工具链:

sudo apt-get install build-essential

如果您缺少构建工具链,您将收到“libxml2 is missing”错误(至少我在 Debian Lenny 上遇到过这个问题)。

Nokogiri 构建测试编译 libxml2 头文件以验证它是否存在,但是,它不区分“缺少 libxml2”和“缺少用于测试 libxml2 的编译器”。

【讨论】:

如果这不是问题,您可能需要安装 libxml2-dev 我已经运行了上面的命令并且得到了'libxml2 is missing'的错误。你能告诉我更多关于构建工具链安装的信息吗?因为我没有找到太多帮助。 我收到这条消息是因为我没有安装 gcc(或任何其他编译器)。我没有编译器工具链。 如果你在 Mac 上:brew install libxslt 然后 brew install libxml2【参考方案3】:

在 Mac OS X (Mavericks) 中,使用 brew 安装库并在安装 gem 之前设置 NOKOGIRI_USE_SYSTEM_LIBRARIES=1 对我有用。

总结:

如果以前安装过,请卸载 gem:

gem uninstall nokogiri

使用 Homebrew 安装 libxml2libxsltlibiconv

brew install libxml2 libxslt libiconv

安装gem,指定要链接的库的路径:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

【讨论】:

我收到了一些关于 libiconv 的错误:“Apple 在 OS X 中分发 libiconv,您可以在 /usr/lib 中找到它。”但只需复制您的 gem 安装脚本就可以了 :) 谢谢! 谢谢!在整个上午试图安装 nokogiri 之后,你的答案(特别是配置路径)终于让它工作了——而不是安装说明(相当无益的)libxml2 不存在,即使路径是正确的。跨度> 在 OS X 上使用端口而不是 brew 并且只需使用 $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri 就可以了 在 OSX El Capitan 10.11.2 中,我必须使用 brew install libxml2 libxslt homebrew/dupes/libiconv 才能工作 此外,我需要添加--with-xml2-include="/usr/local/opt/libxml2/include/libxml2" 才能使gem install nokogiri 命令工作。否则会显示libxml2 version 2.6.21 or later is required!(我的libxml2版本是2.9.2)【参考方案4】:

我刚刚在 Fedora 13 上遇到了同样的问题。经过令人沮丧且不成功的搜索

gem install nokogiri

为我工作,我能够安装它并通过 yum 解决 libxml2 错误。

只需通过yum 而不是gem 命令安装gem:

su
yum search rubygem-nokogiri   #this find the proper package name
yum install rubygem-nokogiri.i686

这帮助我找到了 Fedora 的正确答案,并且由于我使用 RVM 进行 Ruby 包管理,

yum install rubygem-nokogiri

会将所有 Ruby gems 和依赖项拉入系统,而不是拉入我的 RVM 环境,根据我的经验,这会导致非常令人沮丧和谦卑的体验。

所以,找到可以使用的 Nokogiri yum gem:

yum provides  rubygem-nokogiri

并获取 ruby​​gem-Nokogiri 的依赖项列表,它向我显示了缺少的库。之后我跑了:

yum install libxml2-devel libxslt libxslt-devel

现在 Nokogiri 在 Fedora 和 Nokogiri 安装中编译。 D'oh!,我们需要从开发库编译 Nokogiri 的头文件。

【讨论】:

这为我做了,虽然在 ubuntu 中我必须使用 apt-get install libnokogiri-ruby1.9.1 ,然后编辑 Gemfile 以请求 nokogiri 1.5.5 1.5.9 的【参考方案5】:

在 Mac OS X (Mavericks) 中,如果这些解决方案都不起作用,请尝试:

ARCHFLAGS="-arch x86_64" gem install nokogiri

ARCHFLAGS="-arch i386" gem install nokogiri

取决于您的系统架构。

【讨论】:

【参考方案6】:

您通常需要开发文件来构建 gem。试试:

sudo apt-get install libxslt-dev libxml2-dev

(我刚刚看到 Eric 在评论中提出了同样的建议。)

【讨论】:

【参考方案7】:

我能够使用Chocolatey、Windows 8.1 x64 和 DevKit x64 安装它。

cinst libxml2
cinst libxslt
cinst libiconv

gem install nokogiri -- 
  --with-xml2-include=C:\Chocolatey\lib\libxml2.2.7.8.7\build\native\include 
  --with-xml2-lib=C:\Chocolatey\lib\libxml2.redist.2.7.8.7\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-iconv-include=C:\Chocolatey\lib\libiconv.1.14.0.11\build\native\include 
  --with-iconv-lib=C:\Chocolatey\lib\libiconv.redist.1.14.0.11\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-xslt-include=C:\Chocolatey\lib\libxslt.1.1.28.0\build\native\include 
  --with-xslt-lib=C:\Chocolatey\lib\libxslt.redist.1.1.28.0\build\native\bin\v110\x64\Release\dynamic

您必须验证路径中的版本号是否正确。

您可能需要添加 Microsoft 的 NuGet 存储库:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"

【讨论】:

我得到“无法找到包 libxml2”。您在 Chocolately 中有哪些资源? 发现问题了! Chocolatey 的源文件中禁用了 Nuget 源!但是 gem 不起作用:[tid-1789500] 126:找不到指定的模块。 - C:/Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError) @RatkoStibric 我认为您必须使用动态库进行构建:...\x64\Release\dynamic\cdecl 安装 Chocolately 后,使用以下命令添加源:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477" 感谢 Chocolatey,以前从来不知道!【参考方案8】:

会是:

sudo yum install -y libxml2 libxml2-devel

在 RHEL 服务器上。

【讨论】:

【参考方案9】:

在 macOS 上,在我明确提供了指向 --with-xml2-include 的 XCode libxml2 路径之前,以上/以下都没有真正为我工作。

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

【讨论】:

【参考方案10】:

我能够通过以下方式在 Fedora 20 上安装 Nokogiri 1.6.5:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

然后运行:

gem install nokogiri

【讨论】:

【参考方案11】:

对于遇到此问题的其他人,我通过在项目目录中运行此命令解决了它

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

更新:我再次遇到这个问题并尝试更新对我有用的 gem...

gem update nokogiri

【讨论】:

【参考方案12】:

你试过安装 libxml2 吗?不是来自 ruby​​gems,而是通过操作系统的标准安装过程。以 Ubuntu/Debian 为例:

sudo apt-get install libxml2

在任何最新版本的 OS X 上都应该已经安装了它。

【讨论】:

我在 ubuntu 上,我已经按照其他任何 *** 问题中的说明进行了上述所有安装。【参考方案13】:

对于 OSX 用户,如果您之前已成功安装 Nokogiri,但在安装它时遇到错误,例如,使用您添加的新版本 Ruby并且该错误包括像这样的消息:

The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.

这可能表示通过 App Store 手动或自动进行了 XCode 升级,并且您从那时起就没有打开它。

如果是这样,您应该可以打开 XCode,同意新许可证,然后成功安装 Nokogiri。

【讨论】:

【参考方案14】:

在 Mac OS X Yosemite 上,我的错误是我尝试使用 sudo gem install,而根据经验,在安装 gems 时不使用超级用户权限。

在我的例子中,它试图修改 Ruby 的系统安装,这不是一个好主意。我安装了 rbenv,通过它安装了 Ruby 2.2.2 并将其设置为 global,这是 rbenv 文档中的一个术语。之后,Nokogiri 可以通过简单的方式自行安装

gem install nokogiri

不需要任何技巧或变通方法,只需一个适当设置的环境即可; Nokogiri 完美地完成了其余的工作。

【讨论】:

使用sudo 没问题如果您了解它的工作原理、它将在哪里生效、为什么要安装或更新文件以及如何撤消如果失败则采取行动。否则,使用像 rbenv 或 RVM 这样的沙箱是一个真的好主意。【参考方案15】:

能够按照上面的帖子安装 vagrant-awe,但使用如下命令:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws

【讨论】:

【参考方案16】:

对于 Windows x64:

gem inst nokogiri --pre --platform ruby

欲了解更多信息,请查看此主题:https://github.com/sparklemotion/nokogiri/issues/864

【讨论】:

【参考方案17】:

我可以通过运行以下软件包来安装 Nokogiri:

$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch

【讨论】:

【参考方案18】:

=== TLDR ===

正如the instructions 所说,使用最新的 clang 编译器构建 Ruby,或者至少与 Rubygems 用于编译 Nokogiri 的原生扩展 libxml 和 libxsl 的版本相同。

如果使用 RVM,使用 --with-ggc=clang 标志从源代码构建对我来说是这样做的:

rvm install 2.2 --with-gcc=clang

2.2 替换为您想要的任何版本。 --with-gcc=clang 确保 RVM 从源代码构建并使用 clang 进行构建;否则 RVM 可能是一个预先构建的二进制 Ruby,这让我很头疼。

然后,使用 Bundler 或 Rubygems 照常安装 Nokogiri。

=== 深度===

我为此苦苦挣扎了一段时间。 gem install nokogiri给了我:

checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no

mkmf.log我看到了:

conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void)  xmlParseDoc(); return 0;   

Nokogiri 提供自己的 libxml 和 libxsl(从 1.6.4 开始)。 Nokogiri 的 parser.h 本地副本(位于 gem 安装目录下)中定义的签名是:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

所以我不知道如何在密封的 conftest.c 文件使用中的方法调用无法与 parser.h 的头文件匹配。

当我意识到我可能安装了一个二进制 Ruby 时,我使用 --with-gcc=clang 删除并重新安装(强制编译并使用 clang),问题就解决了:

rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri

我不确定为什么会这样,因为系统 libxml 标头 /usr/include/libxml2/libxml/parser.h 与 Nokogiri 的本地副本具有相同的签名。

这很奇怪,但它有效。只要确保你用 clang 编译了一个 Ruby。

【讨论】:

【参考方案19】:
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib

用它改变你的版本。

【讨论】:

以上是关于Nokogiri 安装失败 -libxml2 丢失的主要内容,如果未能解决你的问题,请参考以下文章

在 El Capitan 上安装 Nokogiri (1.6.7) 时出错

安装 ruby​​ gem nokogiri 时缺少 libxslt

ruby nokogiri gem install mac osx high sierra

如何在 Mac OS Sierra 10.12 上安装 Nokogiri

安装 nokogiri (1.5.2) 时出错

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