0

次のような警告について、ネット全体 (スタック オーバーフローを含む) に質問 (および回答) があります。

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

これはNokogiri 1.6.0で修正されるはずでした:

このバージョンの Nokogiri は、libxml2 と libxslt を gem とともに出荷およびコンパイルします。これにより、ほとんどのインストールの問題が修正されます。

そのため、ライブラリのbrewバージョンをアンインストールし、新しいNokogiri 1.6.0 gemをインストールしました(Mac OS 10.8.4では.outputsを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 を正しくビルドおよびロードするための Web 上の他のすべてのトリックは、もはや必要ありません。 この警告が表示された場合は、最初に Nokogiri を 1.6.0 以上にアップグレードしてください。

新しい警告は、LibXML を必要とする他のライブラリよりも前に Nokogiri をロードする必要があることです。私の場合、RMagick は、Nokogiri がロードされる前にシステム LibXML ライブラリ (2.7.8) を間接的にロードしました。

解決策は、最初にロードされ、パッケージ化された LibXML ライブラリ (コンパイルされたもの) がロードされるようにgem 'nokogiri'、あなたのトップに移動することです。GemfileGemfile にまったくない場合は、それに依存する何かによって取り込まれているので、gem 'nokogiri'とにかく最初の gem として追加することができます。

DYLD_PRINT_LIBRARIES参考までに、次のように環境変数を設定することで、ライブラリがロードされる順序を決定できます (したがって、どの gem がどのライブラリをロードさせているかを推測できます) 。

DYLD_PRINT_LIBRARIES=1 rails c
于 2013-09-05T03:06:54.530 に答える