山狮 - LibXML和Nokogiri

26

我刚刚升级到OS X Mountain Lion,当我使用rails和终端时遇到以下问题。

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

我已经查看了其他类似问题的答案,但它们似乎无法阻止警告消息的出现。


使用 gem install 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/ - Domness
你在升级到Mountain Lion之前已经构建它了吗? - Romain
是的,我已经使用Nokogiri有一段时间了。我执行了上面的命令,试图解决一个非常类似的消息。 - Domness
你可能想要完全删除现有的 gem 并重新安装。此外,可能还需要删除任何其他使用 libxml2 的 gem。 - Romain
9个回答

27

我在安装Ruby 1.9.2上遇到了类似的问题,安装nokogiri gem时也出现了一些问题。显然,苹果公司升级了gcc... 我通过建立符号链接来解决这个问题,然后gem就成功安装了:

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


这对我解决了问题 - 我安装了来自homebrew/dupes仓库的apple-gcc42,但是出现了一个错误提示我先安装开发工具(Xcode 4.4 + CLI 工具已经安装)。 - elithrar
2
安装完nokogiri后,您是否会将其重新链接到llvm-gcc-4.2? - Ivan -Oats- Storck
非常感谢!我为这个问题苦恼了好多天。 - Shailesh Kalamkar

18

在我的Gemfile中将gem 'nokogiri'放在gem 'pg'之前,解决了我的问题。

我的Gemfile中没有nokogiri,但它是Gemfile.lock中的一个依赖项,所以我明确地将其放入Gemfile中。


更多关于这个问题的详细信息,请参考此链接问题6802410 - E. Sambo

14

如果你有一个Gemfile,使用bundler的话,通常不建议通过传递标志来安装gems。即使你没有使用bundler,你仍然需要使用自定义编译的libxml,而且你可能无法记得...!一开始我试图通过一些修改来实现这个目标,甚至通过brew安装了libxml2。

事实证明,如果您重新安装(因此重新编译)正在使用的ruby版本(希望使用rvm),它会起作用。

所以,对于RVM用户:

    rvm list (gets your rubies - choose the one being used)
    rvm uninstall RUBY_VERSION
    rvm install SAME_RUBY_VERSION
    bundle (or gem install nokogiri)

这对我起了作用。


这对我有用,但我相当确定它之所以有效,是因为在开始之前我执行了gem uninstall nokogiri。我已经在一个gemset中安装了nokogiri,而当我卸载ruby版本时,该gemset并没有被删除。这可能只是因为我使用了rvm remove命令而不是rvm uninstall,但无论是哪个命令,它都可能不会删除gemsets。 - Liron Yahdav
1
卸载nokogiri并运行新的bundle install对我很有帮助。重新安装Ruby可能有些过度了。你的情况可能会有所不同。 - Ryan
1
卸载nokogiri并运行新的bundle对我没有起作用。重新安装Ruby才解决了问题。 - Kyle Heironimus

9

在 OS X 10.8.2(Mountain Lion)上使用 Ruby 1.9.3-p194 和 Rails 3.2.11,启动 rails c 出现了警告:

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

我尝试了卸载/安装nokogiri的技巧,但没有成功。解决方案要简单得多...只需编辑Gemfile文件,将'nokogiri'放在'pg'之前即可完全避免警告。

参考文献:


3
+1 我已经遇到这个问题很长时间了,感谢你提供的解决方法! - dwhite

7

到目前为止,这里列出的所有解决方案都对我没用。

所以,我执行了 brew uninstall libxml2,它是版本号为 2.8.0 的 libxml2,我猜我的 OS X 预装的是版本号为 2.7.8 的 libxml2。

然后我执行了 gem uninstall nokogiri,再执行了 gem install nokogiri

现在警告已经消失了。但是 libxml2 的版本是 2.7.8 而不是最新版。所以,如果您能提供适用于最新版 libxml2 的一些解决方案,我将不胜感激。


今天我升级到了ruby 1.9.3-p429,然后我开始收到一个警告,与稍微不同的版本:WARNING: Nokogiri was built against LibXML version 2.9.1, but has dynamically loaded 2.7.8。这个解决方案对我很有用。由于某种原因,在以前的ruby升级中重新安装ruby和gem就可以解决问题,但是这次这个方法行不通。 - Liron Yahdav
有趣的是,一旦我运行了 brew uninstall libxml2,即使这个问题已经解决了,brew doctor 也会抱怨:Warning: Some installed formula are missing dependencies. libxml2 是我通过 brew 安装的 libxslt 的依赖项。解决方法很简单,只需在重新安装 nokogiri 后重新安装 libxml2:brew install libxml2。所以现在我的 libxml2 是通过 brew 安装的 2.9.1 版本,但我的系统正在使用 2.7.8 版本。您还可以通过运行 nokogiri -v 来查看这一点。我不确定为什么我安装了 libxslt,但我有一种感觉它与 RVM 有关。 - Liron Yahdav

6

我刚遇到了这个问题。

我的问题出奇地容易解决。

gem uninstall nokogiri

选择所有版本

然后gem install nokogiri,问题就消失了。

如果你使用home-brew,可以执行brew updatebrew doctor。升级到Mountain Lion甚至删除了我的git等内容。我通过在Xcode中安装cc工具并使用brew doctor确保它的正常运行来重新安装它。


5
于是我最终使用了以下命令:
bundle config build.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/

然后执行以下操作:

gem uninstall nokogiri
gem install nokogiri

然后运行

bundle install

3
据我所知,Mountain Lion已经自带了一个与nokogiri兼容的libxml版本,只需要帮助它找到这个版本。以下是我用于bundle配置的代码:bundle config build.nokogiri --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-include=/usr/include/libxslt/ --with-xslt-lib=/usr/lib - antifuchs
1
这种方法似乎会引入问题,因为你正在配置bundler,而它可能是项目特定的。解决这个问题的更好方法似乎是重新安装ruby,然后重新安装nokogiri,就像Thibaut Assus(rbenv)和mavenroger(RVM)在这里的答案中所述。 - Liron Yahdav

2

在解决这个问题的过程中,似乎没有什么方法可用。

随后,我进入 xcode 并安装了更新的命令行工具,接着运行了 gem uninstall nokogirigem install nokogiri 命令,然后它就正常工作了!


1
升级ruby-build后
brew update
brew upgrade ruby-build

我刚刚重新安装了 Ruby(最新版本)

rbenv install 1.9.3-p194

然后我安装了与我的项目相关的所有宝石,包括nokogiri,没有遇到进一步的问题。

gem install bundler
bundle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接