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/lib
find的libxml2来validationMac OSX是否在其引导程序中加载了libxml2库。 做一些像将libxml2*.dylib
所有版本复制到libxml2*.dylib.old
(在我的机器上是libxml2.2.7.3
, libxml2.2
和libxml2
)。
完成之后,运行Nokogiri不会产生任何错误。 这是因为它找不到加载的libxml2,现在将遵循环境path,最终在/opt/local
findlibxml2.2.7.8
。
但是你将无法将旧的libxml文件复制回来。 这是因为操作系统需要在引导程序中加载的libxml2。
closures电源并再次打开电源会烧毁机器。 login屏幕将挂起并挂起并挂起。 在单用户模式下重新上电并重新启动(重启时按住Command – S键 )。 你可以看引导发生。 低看,它会抛出一个错误,它不能加载libxml2,然后停止工作。
关机并再次打开电源。 这次启动进入恢复模式(或者按住Command – R或者按住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"
希望这个帮助