0

整个网络(包括 Stack Overflow)都有关于这样的警告的问题(和答案):

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

应该由 Nokogiri 1.6.0 修复:

这个版本的 Nokogiri 发布并使用 gem 编译 libxml2 和 libxslt。这应该可以解决大多数安装问题。

所以我卸载了库的 brew 版本并安装了新的 Nokogiri 1.6.0 gem(在 Mac OS 10.8.4 上使用rvm 1.18.14. nokogiri -v输出

# Nokogiri (1.6.0)
    ---
    warnings: []
    nokogiri: 1.6.0
    ruby:
      version: 1.9.3
      platform: x86_64-darwin12.4.0
      description: ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.4.0]
      engine: ruby
    libxml:
      binding: extension
      source: packaged
      libxml2_path: /Users/user/.rvm/gems/ruby-1.9.3-p392/gems/nokogiri-1.6.0/ports/i686-apple-darwin11/libxml2/2.8.0
      libxslt_path: /Users/user/.rvm/gems/ruby-1.9.3-p392/gems/nokogiri-1.6.0/ports/i686-apple-darwin11/libxslt/1.1.26
      compiled: 2.8.0
      loaded: 2.8.0

所以我认为我的问题已经解决了。但不是。我的 Rails 3.2.14 应用程序仍然给我同样的警告:

user$ rails c
WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.8

怎么回事?

4

1 回答 1

0

好消息是 Nokogiri 1.6.0 确实解决了不匹配的 LibXML 问题!不再需要网络上关于让旧版本的 Nokogiri 正确构建和加载的所有其他技巧。 如果您收到此警告,首先要做的是将您的 Nokogiri 升级到至少 1.6.0

新的警告是,您必须在任何其他需要 LibXML 的库之前加载 Nokogiri 。在我的例子中,RMagick 在 Nokogiri 加载之前间接加载了系统 LibXML 库(2.7.8)。

解决方案是移动gem 'nokogiri'到您的顶部,Gemfile以便它首先加载,从而加载其打包的 LibXML 库(它被编译的那个)。如果它根本不在您的 Gemfile 中,那么它会被依赖它的东西拉进来,gem 'nokogiri'无论如何您都可以添加为第一个 gem。

仅供参考,您可以通过设置环境变量来确定加载库的顺序(从而推断出什么 gem 导致加载什么库)DYLD_PRINT_LIBRARIES,如

DYLD_PRINT_LIBRARIES=1 rails c
于 2013-09-05T03:06:54.530 回答