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 安装 libxml2
、libxslt
和 libiconv
:
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
并获取 rubygem-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 吗?不是来自 rubygems,而是通过操作系统的标准安装过程。以 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