Nokogiri安装失败-libxml2丢失
按照“ 安装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/
但它返回相同的错误。
我跟着所有其他相关的堆栈溢出文章,没有帮助。 有没有人有解决scheme?
首先,安装依赖关系:
sudo apt-get install libxslt-dev libxml2-dev
如果您仍然收到错误,您可能会错过一个编译器工具链:
sudo apt-get install build-essential
如果你缺less构build工具链(至less我在Debian Lenny上遇到过这个问题),你会得到“libxml2 is missing”的错误。
Nokogiri构buildtesting – 编译一个libxml2头文件来validation它是否存在,但是它没有区分“libxml2 is missing”和“testinglibxml2的编译器丢失”。
您可能实际上需要安装这两个软件包
sudo apt-get install libxslt-dev libxml2-dev
在Mac OS X(Mavericks)中,在安装gem之前使用brew
安装库并设置NOKOGIRI_USE_SYSTEM_LIBRARIES=1
对我来说是个诀窍。
总结:
-
如果以前安装,卸载gem:
gem uninstall nokogiri
-
使用Homebrew安装
libxml2
,libxslt
和libiconv
:brew install libxml2 libxslt libiconv
-
安装指定要链接的库的path的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"
我刚刚在Fedora 13上遇到同样的问题。经过一番挫折和不成功的search
gem install nokogiri
为我工作,我能够安装它,并通过yum
解决libxml2错误。
只需通过yum
而不是gem
命令来安装gem
:
su yum search rubygem-nokogiri #this find the proper package name yum install rubygem-nokogiri.i686
这帮助我find了正确的答案,因为我正在使用RVM进行Ruby包pipe理,
yum install rubygem-nokogiri
将把所有的Rubygem和依赖关系带入系统,而不是进入我的RVM环境,并且以我的经验,会导致一个非常令人沮丧和卑鄙的经验。
所以,要findNokogiri百胜gem,你可以使用:
yum provides rubygem-nokogiri
并获得rubygem-Nokogiri的依赖列表,它向我展示了缺失的库。 之后我跑了:
yum install libxml2-devel libxslt libxslt-devel
现在Nokogiri编译Fedora和Nokogiri安装。 噢!!,我们需要头文件来从开发库中编译Nokogiri。
你通常需要开发文件来构buildgem。 尝试:
sudo apt-get install libxslt-dev libxml2-dev
(我刚刚看到埃里克在评论中提出了同样的build议。)
我可以用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
您必须validationpath中的版本号是否正确。
您可能需要添加Microsoft的NuGet存储库:
-Source "https://go.microsoft.com/fwlink/?LinkID=230477"
这将是:
sudo yum install -y libxml2 libxml2-devel
在RHEL服务器上。
在Mac OS X(Mavericks)中,如果这些解决scheme都不起作用,请尝试:
ARCHFLAGS="-arch x86_64" gem install nokogiri
要么
ARCHFLAGS="-arch i386" gem install nokogiri
取决于您的系统的体系结构。
我可以通过以下操作在Fedora 20上安装Nokogiri 1.6.5:
export NOKOGIRI_USE_SYSTEM_LIBRARIES=true
然后运行:
gem install nokogiri
对于遇到此问题的任何人,我通过在项目目录中运行此命令来解决此问题
gem install nokogiri -- --use-system-libraries
更新:我再次遇到这个,并试图更新为我工作的gem…
gem update nokogiri
你有没有尝试安装libxml2? 不是从rubygems,而是通过操作系统的标准安装过程。 以Ubuntu / Debian为例:
sudo apt-get install libxml2
在任何最新版本的OS X上都应该已经安装了。
在macOS中,在我明确提供Xcode的libxml2path到--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
对于OSX用户来说,如果你之前已经成功安装了Nokogiri,但是却在安装时遇到了错误,比如使用你添加的一个新版本的Ruby, 而且这个错误包括如下的消息:
The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first.
这可能表示通过App Store发生了XCode升级,无论是手动还是自动升级,并且从那时起您还没有打开它。
如果是这样,你应该能够打开XCode,同意新的许可证,然后成功安装Nokogiri。
在Mac OS X优胜美地我的错误是,我试图使用sudo gem install
当按照经验法则安装gem时不使用超级用户权限。
在我的情况下,它试图修改Ruby的系统安装,这不是一个好主意。 我安装了rbenv,安装了Ruby 2.2.2,并将其设置为global
,这是rbenv文档中的一个术语。 之后,Nokogiri可以安装一个简单的
gem install nokogiri
没有必要的黑客或变通办法,只是一个适当的设置环境; Nokogiri完美地完成了其余的任务。
按照上面的post,能够安装stream浪者敬畏,但使用命令如下:
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
对于Windows x64:
gem inst nokogiri --pre --platform ruby
欲了解更多信息检查此线程: https : //github.com/sparklemotion/nokogiri/issues/864
我能够通过运行下列软件包来安装Nokogiri:
$ dnf group install "C Development Tools and Libraries" $ dnf install ruby-devel libxml2-devel patch
=== TLDR ===
正如说明所述 ,使用最新的clang编译器构buildRuby,或者至less与Rubygems将用于编译Nokogiri的本机扩展libxml和libxsl的版本相同。
如果使用RVM,使用--with-ggc=clang
标志从源代码构build,对我来说是什么:
rvm install 2.2 --with-gcc=clang
用你想要的任何版本replace2.2
。 --with-gcc=clang
确保RVM从源代码构build并使用clang来完成; 否则RVM可能会预先build立一个二进制的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 install目录下)中定义的签名是:
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。
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
用它来改变你的版本。