首页 文章

Nokogiri安装失败-libxml2丢失

提问于
浏览
150

我总是按照“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 回答

  • 1

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

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

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

    gem update nokogiri

  • 0

    在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
    
  • 0

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

    sudo apt-get install libxml2
    

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

  • 0

    对于OSX用户,如果您添加了've had success installing Nokogiri before, yet are getting errors installing it on, say, using a new version of Ruby that you',并且该错误包含以下消息:

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

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

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

  • 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"
    
  • 152

    首先,安装依赖项:

    sudo apt-get install libxslt-dev libxml2-dev
    

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

    sudo apt-get install build-essential
    

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

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

  • 55

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

    sudo apt-get install libxslt-dev libxml2-dev
    
  • 21

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

    我在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'哦!,我们需要 Headers 从devel库编译Nokogiri .

  • 12

    您通常需要用于构建gem的开发文件 . 尝试:

    sudo apt-get install libxslt-dev libxml2-dev
    

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

  • 11

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

    ARCHFLAGS="-arch x86_64" gem install nokogiri
    

    要么

    ARCHFLAGS="-arch i386" gem install nokogiri
    

    取决于您系统的架构 .

  • 1

    这将是:

    sudo yum install -y libxml2 libxml2-devel
    

    在RHEL服务器上 .

  • 1

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

    export NOKOGIRI_USE_SYSTEM_LIBRARIES=true
    

    然后运行:

    gem install nokogiri
    
  • 4

    在Mac OS X Yosemite上我的错误是我尝试使用 sudo gem install ,这是一个经验法则,在安装宝石时不使用超级用户权限 .

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

    gem install nokogiri
    

    没有必要的黑客或变通办法,只需一个适当的环境; Nokogiri完美地完成了其余的工作 .

  • 4

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

    NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
    
  • 2

    对于Windows x64:

    gem inst nokogiri --pre --platform ruby
    

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

  • 4

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

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

    === TLDR ===

    作为the instructions state,使用最新的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 .

  • 1
    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
    

    用它来改变你的版本 .

相关问题