Nokogiri安装失败-libxml2丢失

时间:2011-06-08 10:38:49

标签: ruby-on-rails ruby rubygems

我总是按照“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文章,没有人帮忙。有没有人有解决方案?

19 个答案:

答案 0 :(得分:243)

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

sudo apt-get install libxslt-dev libxml2-dev

答案 1 :(得分:153)

首先,安装依赖项:

sudo apt-get install libxslt-dev libxml2-dev

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

sudo apt-get install build-essential

如果你错过了一个构建工具链,你会得到“libxml2 is missing”错误(至少我在Debian Lenny遇到过这个问题)。

Nokogiri构建测试 - 编译一个libxml2头文件以验证它是否存在,但是,它没有区分“缺少libxml2”和“缺少测试libxml2的编译器”。

答案 2 :(得分:55)

在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"
    

答案 3 :(得分:21)

我在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宝石和依赖项引入系统,而不是我的RVM环境,并且根据我的经验,这将导致非常令人沮丧和谦卑的体验。

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

yum provides  rubygem-nokogiri

并获取rubygem-Nokogiri的依赖项列表,其中显示了缺少的库。之后我跑了:

yum install libxml2-devel libxslt libxslt-devel

现在Nokogiri在Fedora和Nokogiri安装程序中编译。 D'哦!,我们需要标题来从devel库编译Nokogiri。

答案 4 :(得分:13)

您通常需要用于构建宝石的开发文件。尝试:

sudo apt-get install libxslt-dev libxml2-dev

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

答案 5 :(得分:12)

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

ARCHFLAGS="-arch x86_64" gem install nokogiri

ARCHFLAGS="-arch i386" gem install nokogiri

取决于您系统的架构。

答案 6 :(得分:11)

它将是:

sudo yum install -y libxml2 libxml2-devel

在RHEL服务器上。

答案 7 :(得分: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"

答案 8 :(得分:5)

在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

答案 9 :(得分:4)

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

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

然后跑步:

gem install nokogiri

答案 10 :(得分:4)

对于遇到此问题的其他人,我通过在项目目录

中运行此命令解决了这个问题

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

更新:我再次遇到这个并尝试更新为我工作的宝石......

gem update nokogiri

答案 11 :(得分:2)

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

sudo apt-get install libxml2

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

答案 12 :(得分:1)

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

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws

答案 13 :(得分:1)

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

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

安装自己
gem install nokogiri

不需要黑客或变通方法,只需设置适当的环境; Nokogiri完美地完成了其余工作。

答案 14 :(得分:1)

对于OSX用户,如果您之前已成功安装Nokogiri,但在安装它时会出现错误,例如,使用您已添加的新版Ruby该错误包含如下消息:

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

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

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

答案 15 :(得分:1)

对于Windows x64:

gem inst nokogiri --pre --platform ruby

有关更多信息,请查看以下主题:https://github.com/sparklemotion/nokogiri/issues/864

答案 16 :(得分: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

用它更改您的版本。

答案 17 :(得分:0)

=== 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。

答案 18 :(得分:0)

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

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