Nokogiri安装失败-缺少libxml2


156

我始终按照“ 安装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
您的操作系统是什么?
杰克·琼斯

2
这是更合适的答案-sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra

Answers:


163

首先,安装依赖项:

sudo apt-get install libxslt-dev libxml2-dev

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

sudo apt-get install build-essential

如果您缺少构建工具链(至少我在Debian Lenny上遇到过此问题),则会出现“ libxml2 is missing”错误。

Nokogiri构建对libxml2头文件进行测试编译以验证其是否存在,但是,它无法区分“ libxml2丢失”和“用于测试libxml2的编译器”。


44
如果这不是问题,则可能需要安装libxml2-dev
Erik Peterson

1
我已经运行了上面的命令,并得到“ libxml2 is missing”错误。您能否告诉我更多有关构建工具链安装的信息。b'cos我没有找到很多帮助。
罗希特A.

1
我收到该消息是因为我没有安装gcc(或任何其他编译器)。我没有编译器工具链。
Erik Peterson

7
如果您使用的是Mac:brew install libxslt然后brew install libxml2
Sam Backus 2014年

245

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

sudo apt-get install libxslt-dev libxml2-dev

7
评分很高的评论如何位于接受的答案下方?
新亚历山大(Alexandria)

3
因为该问题表明“即使在安装所有依赖项之后”。因此,可接受的答案是正确的。
2013年

62

在Mac OS X(Mavericks)中,在安装gem之前先安装brew和设置库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 install脚本即可:)谢谢!
Automatico'Aug

谢谢!一整天的早晨,试图安装nokogiri之后,您的答案(特别是配置路径)终于使它起作用了,而不是安装(而不是毫无帮助地)声明libxml2不存在,即使路径正确也是如此。
Pebbl

2
在OS X上使用端口而不是brew即可$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri完成操作
AndresKütt2015年

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

22

我在Fedora 13上遇到了同样的问题。在进行了令人沮丧且不成功的搜索后,

gem install nokogiri

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

只需通过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 gem和依赖项引入系统中,而不是引入我的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
ffflabs

13

在Mac OS X(Mavericks)中,如果这些解决方案均无效,请尝试:

ARCHFLAGS="-arch x86_64" gem install nokogiri

要么

ARCHFLAGS="-arch i386" gem install nokogiri

取决于系统的体系结构。


13

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

sudo apt-get install libxslt-dev libxml2-dev

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


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中有哪些资料来源?
艾萨克·沃勒2014年

3
发现了问题!在Chocolatey的源文件中已禁用Nuget源!但是gem不起作用:[tid-1789500] 126:找不到指定的模块。-C:/Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so(LoadError)
Ratko Stibric 2014年

@RatkoStibric我认为您必须使用动态库构建:...\x64\Release\dynamic\cdecl
Chloe 2014年

1
一旦安装好巧克力,请使用以下命令添加源:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck

1
感谢Chocolatey,以前从未知道过!
理查德·派克

11

这将是:

sudo yum install -y libxml2 libxml2-devel

在RHEL服务器上。


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

通过执行以下操作,我能够在Fedora 20上安装Nokogiri 1.6.5:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

然后运行:

gem install nokogiri

4

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

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

更新:我再次遇到这个问题,并尝试只是更新对我有用的宝石...

gem update nokogiri


2

您是否尝试安装libxml2?不是来自rubygems,而是通过操作系统的标准安装过程。例如在Ubuntu / Debian上:

sudo apt-get install libxml2

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


我在ubuntu上,并且按照任何其他stackoverflow问题中的说明进行了上述所有安装。
Rohit A.

1

对于OSX用户,如果你已经成功安装前引入nokogiri,但越来越错误上安装,比方说,使用Ruby的新版本,您已经添加包括这样的消息的错误:

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

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

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


1

在Mac OS X Yosemite上,我的错误是我试图sudo gem install在安装gems时不使用超级用户特权的情况下尝试使用它。

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

gem install nokogiri

无需黑客或变通办法,只需设置适当的环境即可;Nokogiri可以完美地完成其余的工作。


使用sudo是OK 如果你了解它是如何工作的,在那里它要生效,为何正安装或更新应安装的文件,以及如何,如果它不能撤消的操作。否则,使用像rbenv或RVM沙盒是真的好主意。
Tin Man

1

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

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws


0

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

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

0

=== TLDR ===

根据说明,使用最新的clang编译器或至少与Rubygems用来编译Nokogiri的本机扩展libxml和libxsl的版本相同的版本来构建Ruby。

如果使用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。


0
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

更改您的版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.