我总是按照“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 回答
对于遇到此问题的其他人,我通过在项目目录中运行此命令来解决它
gem install nokogiri -- --use-system-libraries
更新:我再次遇到这个并尝试更新为我工作的宝石......
gem update nokogiri
在macOS上面,我没有真正为我工作,直到我明确提供XCode libxml2路径到
--with-xml2-include
.你试过安装libxml2吗?不是来自rubygems,而是通过操作系统的标准安装过程 . 以Ubuntu / Debian为例:
在任何最新版本的OS X上,它应该已经安装 .
对于OSX用户,如果您添加了've had success installing Nokogiri before, yet are getting errors installing it on, say, using a new version of Ruby that you',并且该错误包含以下消息:
这可能表示通过App Store手动或自动发生了XCode升级,并且您从那时起就没有打开它 .
如果是这样,您应该能够打开XCode,同意新许可证,然后成功安装Nokogiri .
我能够安装Chocolatey,Windows 8.1 x64和DevKit x64 .
您必须验证路径中的版本号是否正确 .
您可能需要添加Microsoft的NuGet存储库:
首先,安装依赖项:
如果仍然收到错误,则可能缺少编译器工具链:
如果你错过了一个构建工具链,你会得到“libxml2 is missing”错误(至少我在Debian Lenny遇到过这个问题) .
Nokogiri构建测试编译libxml2头文件以验证它是否存在,但是,它没有区分“缺少libxml2”和“缺少测试libxml2的编译器” .
您实际上可能需要安装这两个软件包
在Mac OS X(Mavericks)中,在安装gem之前使用
brew
安装库并设置NOKOGIRI_USE_SYSTEM_LIBRARIES=1
对我来说是个窍门 .总结:
libxml2
,libxslt
和libiconv
:我在Fedora 13上遇到了同样的问题 . 经过令人沮丧和不成功的搜索
为我工作,我能够安装它并通过
yum
解决libxml2错误 .只需通过
yum
而不是gem
命令安装gem:这有助于我找到适合Fedora的正确答案,因为我使用RVM进行Ruby包管理,
将所有Ruby宝石和依赖项引入系统,而不是进入我的RVM环境,并根据我的经验导致非常令人沮丧和谦卑的体验 .
所以,你可以使用以下的Nokogiri yum gem:
并获取rubygem-Nokogiri的依赖项列表,其中显示了缺少的库 . 之后我跑了:
现在Nokogiri编译Fedora和Nokogiri安装程序 . D'哦!,我们需要 Headers 从devel库编译Nokogiri .
您通常需要用于构建gem的开发文件 . 尝试:
(我刚才看到埃里克在评论中提出了同样的建议 . )
在Mac OS X(Mavericks)中,如果这些解决方案都不起作用,请尝试:
要么
取决于您系统的架构 .
这将是:
在RHEL服务器上 .
我能够通过以下方式在Fedora 20上安装Nokogiri 1.6.5:
然后运行:
在Mac OS X Yosemite上我的错误是我尝试使用
sudo gem install
,这是一个经验法则,在安装宝石时不使用超级用户权限 .在我的情况下,它试图修改Ruby的系统安装,这不是一个好主意 . 我安装了rbenv,通过它安装了Ruby 2.2.2并将其设置为
global
,这是来自rbenv文档的术语 . 之后,Nokogiri可以用简单的方式安装自己没有必要的黑客或变通办法,只需一个适当的环境; Nokogiri完美地完成了其余的工作 .
能够按照上面的帖子安装vagrant-awe,但使用如下命令:
对于Windows x64:
有关更多信息,请查看此主题:https://github.com/sparklemotion/nokogiri/issues/864
我可以通过运行以下软件包来安装Nokogiri:
=== TLDR ===
作为the instructions state,使用最新的clang编译器构建Ruby,或者至少使用Rubygems用于编译Nokogiri的本机扩展libxml和libxsl的相同版本 .
如果使用RVM,使用
--with-ggc=clang
标志从源代码构建是为我做的:将
2.2
替换为您想要的任何版本 .--with-gcc=clang
确保RVM从源代码构建并使用clang来实现;否则RVM可能是一个预先构建的二进制Ruby,这就是让我失望的原因 .然后,使用Bundler或Rubygems正常安装Nokogiri .
===深度===
我挣扎了一段时间 .
gem install nokogiri
给了我:深入研究
mkmf.log
我看到:Nokogiri提供自己的libxml和libxsl(截至1.6.4) . Nokogiri的parser.h本地副本(在gem安装目录下找到)中定义的签名是:
所以我不知道如何在密封的conftest.c文件使用中调用方法与parser.h的头文件不匹配 .
当我意识到我可能安装了一个二进制Ruby我删除并重新安装使用
--with-gcc=clang
(强制编译和使用clang),问题解决了:我不完全确定为什么它可以工作,因为系统libxml头
/usr/include/libxml2/libxml/parser.h
与Nokogiri的本地副本具有相同的签名 .这很奇怪,但它确实奏效了 . 只需确保使用clang编译Ruby .
用它来改变你的版本 .