Nokogiri安装失败-libxml2缺失。

157

我总是通过按照 "安装 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文章,但没有帮助。有人有解决方案吗?


1
你的操作系统是什么? - Jake Jones
2
这是更恰当的答案 - sudo apt-get install libxslt-dev libxml2-dev。 - Pratik Bothra
19个回答

249

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

sudo apt-get install libxslt-dev libxml2-dev

7
这条评论评分如此之高,为什么却排在被接受的答案下方? - New Alexandria
3
因为问题中已经声明了“即使在安装了所有依赖项之后”,所以被接受的答案是正确的。 - b0fh

167

首先,安装依赖项:

sudo apt-get install libxslt-dev libxml2-dev

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

sudo apt-get install build-essential

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

Nokogiri的构建测试会编译一个libxml2头文件来验证其是否存在,但它无法区分“libxml2丢失”和“缺少测试libxml2的编译器”两种情况。


44
如果这不是问题所在,你可能需要安装libxml2-dev. - Erik Peterson
1
我已经运行了上述命令并收到了“libxml2缺失”的错误。 你能告诉我更多关于构建工具链的安装吗? 因为我在这方面没有找到太多帮助。 - Rohit A.
1
我收到了那个消息,因为我没有安装gcc(或任何其他编译器)。我没有编译器工具链。 - Erik Peterson
7
如果您使用的是Mac电脑: 先运行命令:brew install libxslt, 然后再运行命令:brew install libxml2。 - Sam Backus

65
在Mac OS X(Mavericks)中,我使用brew安装库并在安装gem之前设置NOKOGIRI_USE_SYSTEM_LIBRARIES=1解决了问题。
总结一下:
  • 如果之前已经安装了gem,请先卸载:

    gem uninstall nokogiri
    
  • 使用Homebrew安装libxml2libxsltlibiconv

  • brew install libxml2 libxslt libiconv
    
  • 通过指定要链接的库的路径安装gem:

  • Install the gem specifying the paths to the libraries to be linked against:

  • 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安装脚本即可解决:) 谢谢! - Automatico
谢谢!整个早上都在尝试安装nokogiri,你的回答(特别是配置路径)最终让它工作了 - 而不是安装状态(非常没有帮助地)表明libxml2不存在,即使路径是正确的。 - Pebbl
2
在OS X上使用端口而不是brew,只需运行$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri就可以解决问题。 - Andres Kütt
2
在OSX El Capitan 10.11.2中,我使用了brew install libxml2 libxslt homebrew/dupes/libiconv才使其正常工作。 - Hai Feng Kao
2
此外,我需要添加 --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)。 - Hai Feng Kao

23

我在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中已经编译完成并安装了。天啊!我们需要从devel库中获取头文件来编译Nokogiri。


这对我有帮助,虽然在Ubuntu上我必须使用apt-get install libnokogiri-ruby1.9.1命令,然后编辑Gemfile以请求nokogiri 1.5.5而不是1.5.9。 - ffflabs

13

通常在构建 gem 包时需要开发文件。请尝试执行以下操作:

sudo apt-get install libxslt-dev libxml2-dev

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


13

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

ARCHFLAGS="-arch x86_64" gem install nokogiri
或者
ARCHFLAGS="-arch i386" gem install nokogiri

根据您系统的架构来决定。


11

它将是:

sudo yum install -y libxml2 libxml2-devel

在 RHEL 服务器上。


11

我能够使用 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中有哪些源? - Isaac Waller
3
发现问题了!在Chocolatey的源文件中禁用了Nuget sources!但是gem无法工作:[tid-1789500] 126:找不到指定的模块-C:/Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so(LoadError) - Ratko Stibric
@RatkoStibric 我认为你必须使用动态库构建:...\x64\Release\dynamic\cdecl - Chloe
1
安装了 Chocolatey 之后,请使用以下命令添加源:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477" - Richard Peck
1
谢谢 Chocolatey,以前从未听说过它! - Richard Peck
这还正确吗?我遇到了同样的错误,而且choco无法安装libxml2。 “在列出的源中找不到该软件包。源:'https://community.chocolatey.org/api/v2/;https://go.microsoft.com/fwlink/?LinkID=230477'” - undefined

6
在macOS上,以上/以下的方法对我都没有真正起作用,直到我明确提供了XCode libxml2路径给--with-xml2-include参数。
gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2 --use-system-libraries

4

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

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

更新:我再次遇到这个问题,尝试只更新 gem,结果成功了...

gem update nokogiri


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接