web-dev-qa-db-ja.com

Macユーザーおよび警告:NokogiriはLibXMLバージョン2.7.8に対して構築されましたが、2.7.3を動的にロードしました

私はあらゆる種類の研究を行い、多くの異なることを試しました。私はこの質問に何度も答えられたことを知っていますが、提案された解決策のどれも私のために機能していません。

Lionにアップグレードした後、Rubyでセグメンテーションエラーが発生しています。のこぎりだとかなり確信しています。そこで、Homebrew経由でlibxml2をインストールしました。 brew link libxml2。次に、そのバージョンのライブラリを使用してNokogiriを再インストールしました。

証明のため:

$ 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

Nokogiriをgemfileの先頭に既に含めており、環境ファイルにもNokogiriを必要としました。なぜその警告が表示されるのか、私にはわかりません。

適切なバージョンのlibxml2を確実にロードするための提案やアイデアはありますか?

82
Binary Logic

朝の大部分をこの警告に費やしました。この修正は、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

libxml2をMacPorts経由でインストールしたSnow Leopard用です。

Lionでは、libxml2はbootstrapプロセスの一部としてロードされます。どのlibxml2 Nokogiriが指しているかに関係なく、libxml2のLionシステムのデフォルトライブラリは実行時に使用されます。Lionはlibxml2.2.7を使用します。 3は/usrで見つかりました(/usr/localではありません)。

他の多くの場所で述べたように、警告を無視することができます。私のように、警告があなたを狂わせたら、あなたはこれをすることができます:

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

これは、RubyおよびRailsが、libxml2をロードしたシステムと、環境パスからlibxml2を使用したコマンドラインを使用して、libxml2がロードされる方法により多くあることを示唆しています。とにかく、これは私のためにエラーを沈黙させます。

もう一度言います。これはライオン専用です。以前の修正はSnow Leopardで機能します。

これで答えは終わりです。ここで読むのをやめてください。


OK、あなたは読むのをやめなかった...まあ...

推奨しません!!!!!!

あなたは警告されました。 /usr/libにあるlibxml2を無効にすることで、Mac OSXがbootstrap=でlibxml2ライブラリをロードしていることを確認できます。libxml2*.dylibのすべてのバージョンをlibxml2*.dylib.old(私のマシンでは、これはlibxml2.2.7.3libxml2.2、およびlibxml2でした)。

これを行った後、Nokogiriを実行してもエラーは発生しません。これは、ロードされたlibxml2を見つけることができず、環境パスをたどり、最終的にlibxml2.2.7.8/opt/localを見つけるためです。

ただし、古いlibxmlファイルをコピーして戻すことはできません。これは、OSがブートストラップにロードされたlibxml2を必要とするためです。

電源をオフにして再びオンにすると、マシンがブロックされます。ログイン画面がハングし、ハングしてハングします。シングルユーザーモードで電源をオフにして再びオンにします(長押し Command-S 再起動中)。 bootstrapが発生するのを見ることができます。低いと見れば、libxml2をロードできないというエラーがスローされ、動作が停止します。

電源をオフにしてから再度オンにします。今度はリカバリモードで起動します(ホールド Command-R またはホールド Option リカバリディスクを選択します)。復旧モードでターミナルを開きます(utilities/terminal)。 HDに/usr/libをマウントし(/Volumes/Macintosh\ HD/usr/libを試してください)、libxml2ファイルをコピーします。再起動するとすべてが正常になります。

39
Kenton

Nokogiriをgem install nokogiriでインストールした場合、gem pristine nokogiriを実行してgemのC拡張を再コンパイルすることでこの警告を解決できます。

Nokogiriをbundle installでインストールした場合は、bundle exec gem pristine nokogiriを実行して、Bundlerがインストールした場所のgemのC拡張を再コンパイルすることで、この警告を解決できます。

96
indirect

Homebrewとbundlerを使用している場合にこれを修正するには、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が最初に必要を使用して、ロードするライブラリの指定に失敗したgemによってロードされたlibxml2の古いシステムバージョンではなく、動的なlibxml2ライブラリをアプリにロードする必要があります。

58
Michiel de Mare

これはどれも私にとってはうまくいきませんでした。

Brewを使用してlibxml2を新しいバージョン(2.7.8)にインストールしました。これにより、nokogiriがコンパイルされ、その後の問題が発生しました。解決策、それを削除してからビルドし、必要に応じてインストールします。

うまくいったのは次のとおりです。

  • brew uninstall libxml2(以前にインストールした場合)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2(オプション)
27
nkadwa

Mountain Lionにアップデートした後の解決策(私にとって)ははるかに簡単でした:

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

上記のpatrickmcgrawからのコメントによると、単にGemfileの最初のエントリとしてnokogiriを置くだけでうまくいきました。元のコメントが埋もれているので、私はそれを別の回答としています。

source 'http://rubygems.org'
gem 'nokogiri'
gem 'Rails', '3.0.20'
etc...
9
Shaun

Gemのインストール後にシステムライブラリを更新したように見えるため、Nokogiriを更新する必要があります。現在のlibバージョンを使用するには:

 gem install nokogiri -- --use-system-libraries
4
raittes

Bundlerには、デフォルトのビルド場所を設定するオプションがあります。たとえば、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 にビルドオプションを設定するための便利な例もいくつかあります。

4
foz

私は同様の問題を抱えていて、この方法で解決しました:

私の場合、RVMがインストールされており、@ globalおよび@project gemセットがありました。両方ともnokogiriがインストールされていて、そのうちの1つは異なるlibxmlでビルドされていました。

両方を再構築すると(これを行う理由があります)、問題は解決しました。

お役に立てれば..

2
shigeya

gem install libxml-Rubyは私を助けます

1
bmalets
gem uninstall nokogiri
bundle  #install nokogiri again

「libxml2が見つかりません」で失敗した場合。 「/usr/bin/gcc-4.2 ...」を使用しようとしているgems/nokogiri-1.5.0/ext/nokogiri/mkmf.logが表示される場合、/ 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

Libxml2 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をbrewとbundlerで実行しています。

1
konyak

このメッセージがあり、nokogiriがgemソースから入手可能なバージョンで最新でない場合は、単にbundle update nokogiri新しいコードを取得して再コンパイルします。エラーはなくなるはずです。

0

自分でこれに遭遇しました(OS X Lion 10.7.5)。私の正確なメッセージは:NokogiriはLibXMLバージョン2.8.0に対して構築されましたが、動的に2.7.3をロードしました

ここで言及したいくつかの提案を試しましたが、どれも機能しませんでしたが、これはうまくいきました:

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

説明は、「どのlibxml2 Nokogiriが構築されたかに関係なく、Lionシステムのデフォルトのlibxml2(ブートストラップでロードされる)が使用されるためです」。

クレジット: https://coderwall.com/p/o5ewia

0
Arta

実際には、2つのバージョンのlibxmlをインストールしました。1つはソースから、もう1つはRPMからです。

以下は私の完全なソリューションです

ソースを(ソースディレクトリから)アンインストールしました

Sudo make uninstall

バンドルを削除する

rm -rf ~/.bundle ~/.bundler

LD(Sudoではなくルートとしてこれを行う必要がある場合があります)

Sudo ldconfig

その後、バンドルを再インストールしました

bundle install
0
jessebs

OS:マーベリック10.9.3

Ruby 1.9.3

警告:NokogiriはLibXMLバージョン2.9.1に対して構築されましたが、動的に2.9.0をロードしました

私の解決策:

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"

この助けを願っています

0
Phan Trung Kien