Mac用户和获取警告:Nokogiri是build立在2.7X的LibXML版本,但已dynamic加载2.7.3

我做了各种研究,尝试了许多不同的东西。 我知道这个问题已经被回答了很多次,但是没有一个build议的解决scheme为我工作。

升级到狮子后,我得到了Ruby中的分段错误。 我相当有信心,这是Nokogiri。 所以我通过Homebrew安装了libxml2。 我运行brew link libxml2 。 然后我使用该版本的库重新安装了Nokogiri。

为了certificate:

 $ nokogiri -v # Nokogiri (1.5.0) --- warnings: [] nokogiri: 1.5.0 ruby: version: 1.9.2 platform: x86_64-darwin11.0.0 description: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0] engine: ruby libxml: binding: extension compiled: 2.7.8 loaded: 2.7.8 

我已经在我的gem文件的顶部包含了Nokogiri,并且还在我的环境文件中要求它。 我不知道为什么我仍然得到这个警告。

任何build议或想法,以确保它正在加载正确的版本libxml2?

我刚刚在这个警告中度过了美好的一天。 此修复程序适用于使用Mac OS Lion的用户。 上面的修复使用

 bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local 

是通过MacPorts安装libxml2的雪豹。

在Lion中,libxml2作为引导过程的一部分加载。 无论哪个libxml2 Nokogiri指向,libxml2的Lion系统默认库将在运行时使用。 Lion使用/usr (而不是/usr/local )中的libxml2.2.7.3。

正如其他许多地方提到的,人们可以忽略这个警告。 如果像我一样,警告让你发疯,你可以这样做:

 bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local 

有趣的是,如果你在命令行键入nokogiri -v ,你会得到相反的警告:

 WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8 

这表明还有更多的libxml2被加载,Ruby和Rails使用系统加载的libxml2和命令行使用libxml2从环境path。 无论如何,这沉默了我的错误。

我会再说一遍 – 这只是狮子。 以前的修复将适用于Snow Leopard。

这是答案的结尾。 停止阅读这里。


好吧,你没有停止阅读…呃…

不build议!!!!!!

你被警告了。 您可以通过禁用/usr/libfind的libxml2来validationMac OSX是否在其引导程序中加载了libxml2库。 做一些像将libxml2*.dylib所有版本复制到libxml2*.dylib.old (在我的机器上是libxml2.2.7.3libxml2.2libxml2 )。

完成之后,运行Nokogiri不会产生任何错误。 这是因为它找不到加载的libxml2,现在将遵循环境path,最终在/opt/localfindlibxml2.2.7.8

但是你将无法将旧的libxml文件复制回来。 这是因为操作系统需要在引导程序中加载的libxml2。

closures电源并再次打开电源会烧毁机器。 login屏幕将挂起并挂起并挂起。 在单用户模式下重新上电并重新启动(重启时按住CommandS键 )。 你可以看引导发生。 低看,它会抛出一个错误,它不能加载libxml2,然后停止工作。

关机并再次打开电源。 这次启动进入恢复模式(或者按住CommandR或者按住Option ,然后select恢复盘)。 在恢复模式下打开terminal( utilities/terminal )。 在你的HD上安装/usr/lib (尝试/Volumes/Macintosh\ HD/usr/lib )并将libxml2文件复制回来。 重启,一切都会好的。

如果你用gem install nokogiri ,你可以通过运行gem pristine nokogiri来重新编译gem的C扩展来解决这个警告。

如果你使用bundle install安装Nokogiri,你可以通过运行bundle exec gem pristine nokogiri来解决这个警告,以便在Bundler安装的时候重新编译bundle exec gem pristine nokogiri的C扩展。

要解决这个问题,如果你使用的是自制软件和打包器,把gem 'nokogiri'添加你的Gemfile 的顶部 ,然后运行这些命令:

 gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ bundle install 

如果您不使用捆绑器,请运行以下命令:

 gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ 

在您的应用程序中,您应该首先要求nokogiri ,强制应用程序加载dynamiclibxml2库,而不是由gem加载的libxml2的较旧系统版本,这些版本未能指定加载哪个库。

这一切都为我工作。

我有一个更高的版本(2.7.8)与brew的libxml2安装。 这导致nokogiri反对它和后来的问题。 解决scheme,删除它,然后build立,然后安装,如果需要的话。

这是什么工作:

  • brew uninstall libxml2 (如果以前安装)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (可选)

更新到山狮后的解决scheme(对我来说)是非常简单的:

 gem uninstall nokogiri # (and ignore the warnings about dependencies) gem install nokogiri 

根据上面patrickmcgraw的评论,简单地把nokogiri作为我的Gemfile中的第一个条目为我工作。 我把它作为一个单独的答案,因为原来的评论已经被埋没了。

 source 'http://rubygems.org' gem 'nokogiri' gem 'rails', '3.0.20' etc... 

Bundler有选项来设置默认的构build位置。 例如,通过macports安装libxml2:

 $ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local 

这样做和bundle install ,警告消失了。

在nokogiri wiki上设置构build选项也有一些有用的例子。

我有类似的问题,只是这样解决:

在我的情况下,我安装了RVM,并且有@global和@project gem集。 他们俩都安装了nokogiri,其中一个用不同的libxml构build。

重build他们(我有理由这样做)解决了这个问题。

希望这可以帮助..

看起来你已经更新了你的系统库后安装gem,所以你必须更新Nokogiri。 要使用当前的lib版本:

  gem install nokogiri -- --use-system-libraries 
 gem uninstall nokogiri bundle #install nokogiri again 

如果以“libxml2丢失”失败。 你会看到gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log尝试使用“/usr/bin/gcc-4.2 …”,那么你缺less/usr/bin/gcc-4.2

解:

 sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2 

之前:

 $ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2 

后:

 $ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2 lrwxr-xr-x 1 root wheel 12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc 

如果你真的缺lesslibxml2 libxslt,那么

 brew update brew install libxml2 libxslt brew link libxml2 libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ bundle 

仅供参考:我正在用冲泡和打包机运行Mountain Lion。

gem install libxml-ruby帮助我

我实际上已经安装了两个版本的libxml,一个来自源,一个来自RPM。

以下是我的完整解决scheme

我卸载源(从源目录)

 sudo make uninstall 

删除捆绑

 rm -rf ~/.bundle ~/.bundler 

更新LD(可能必须以root身份执行此操作,而不是sudo)

 sudo ldconfig 

然后重新安装捆绑

 bundle install 

刚刚碰到这个自己(OS X的狮子10.7.5)。 我的确切消息是:Nokogiri是针对LibXML 2.8.0版本构build的,但是已经dynamic加载2.7.3

我尝试了这里提到的一些build议,没有工作,但是这样做:

 gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local 

解释是:“发生这种情况是因为使用Lion系统默认的libxml2(在bootstrap中加载),无论哪个libxml2 Nokogiri是针对哪个版本构build的”。

致谢: https : //coderwall.com/p/o5ewia

操作系统:特立独行10.9.3

Ruby 1.9.3

警告:Nokogiri是针对LibXML 2.9.1版本构build的,但是已经dynamic加载了2.9.0

我的解决scheme

 gem uninstall nokogiri brew update cd /usr/local brew versions libxml2 git checkout 5dd45d7 /usr/local/Library/Formula/libxml2.rb # libxml version 2.9.0 brew install libxml2 bundle install or gem install nokogiri -v "1.5.11" 

希望这个帮助