Macユーザーと警告:NokogiriはLibXMLバージョン2.7.8に対してビルドされましたが、動的に2.7.3をロードしました


82

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

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

すでにgemfileの先頭にNokogiriを含めており、環境ファイルにもそれを要求しています。なぜまだその警告が表示されるのかわかりません。

正しいバージョンのlibxml2がロードされていることを確認するための提案やアイデアはありますか?


9
Nokogiri 1.6以降ではlibxml2がgemにバンドルされているため、Homebrewからlibxml2を削除するだけでこのエラーを修正できます。brew remove --force libxml2 bundle config --delete build.nokogiri gem uninstall nokogiri libxml-ruby bundle
Nate Berkopec 2013年


@NateBerkopec。あなたの解決策は私のために働いたが、受け入れられた答えはうまくいかなかった。
egyamado 2014

1.6.2.1そしてUbuntu 12.04素敵を再生しないでください。1.6.1私が見つけた他のすべての修正を試した後、それを修正するために戻ってきました。
ダミアンロシュ2014年

回答:


39

私は朝の大部分をこの警告に取り組んで過ごしました。この修正は、Mac OSLionを使用しているユーザーを対象としています。上記の修正を使用して

bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local

MacPorts経由でlibxml2がインストールされたSnowLeopard用です。

Lionでは、libxml2がブートストラッププロセスの一部としてロードされます。どのlibxml2Nokogiriが指しているかに関係なく、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を使用します。とにかく、これは私にとってエラーを沈黙させます。

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

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


OK、あなたは読むのをやめませんでした...まあ...

推奨されません!!!!!!

あなたは警告されました。にあるlibxml2を無効にすることで、MacOSXがブートストラップにlibxml2ライブラリをロードしていることを確認でき/usr/libます。すべてのバージョンのコピーのような何かをするlibxml2*.dylibにはlibxml2*.dylib.old(私のマシン上でこれだったlibxml2.2.7.3libxml2.2libxml2)。

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

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

電源をオフにしてから再度オンにすると、マシンがブリックされます。ログイン画面がハングし、ハングしてハングします。シングルユーザーモードで電源をオフにしてから再度オンにします(再起動中はCommand-Sを押し続けます)。ブートストラップが発生するのを見ることができます。低くて見よ、それはlibxml2をロードできないというエラーをスローし、その後動作を停止します。

電源を切り、再度電源を入れます。今回はリカバリモードで起動します(ホールドCommand-RまたはホールドOptionしてリカバリディスクを選択します)。リカバリモードで、ターミナル(utilities/terminal)を開きます。/usr/libHDにマウントして(try /Volumes/Macintosh\ HD/usr/lib)、libxml2ファイルをコピーして戻します。再起動すると、すべて問題ありません。


1
ええと...ビルドオプションを/ usrと/ opt / local(MacPorts)の間で分割するためのあなたの指示は私のためにそれをしました...ありがとう
Phillip Koebbe 2011

私より賢い人が
ケントン

私はこの投稿をランダムに偶然見つけて役に立たなかったが、この詳細な回答は努力に多くの賛成に値する!
starscream_disco_party 2012

2
このソリューションのバリエーションを使用しました(動的にロードされたバージョンは2.9.0でした):bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
sberkley 2013

更新されたヒントを提供してくれた@sberkleyに感謝します。実行したときに、で実行すると~、この値がグローバルに設定されているように見えることに気付きました。したがって、これを1回だけ実行でき、二度と心配する必要はありません。
duma 2013

97

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

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


5
優れたありがとう。bundle exec gem pristine nokogiriばっちり成功。
toxaq 2013年

1
Ubuntu 12.04に2.7.8を動的にロードすることで2.8.0に対してビルドされることについて警告し、私にとっては完璧に機能しました
リチャード2013

Lionとrails3.2.16で警告が消えるには、「bundle exec gem pristine nokogiri」と、「gemnokogiri」を「gemrails」の前に移動する必要がありました
jpw 2013

1
これはOSX Mavericksで機能しましたが、受け入れられた回答は機能しませんでした。
CBanga 2014年

これは受け入れられる答えであり、非常に冗長で混乱することは言うまでもなく、マシンをブリックする可能性のあるものではありません。
グレッグブラス2016

58

homebrewとbundleを使用している場合にこれを修正する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

bundlerを使用しない場合は、代わりに次のコマンドを実行してください。

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ライブラリをアプリにロードするように強制する必要があります。


linkunlinkコマンドは必要ないと思います。私はそれらを使わずに逃げることができました。
M.スコット・フォード

たとえば、を使用している場合は、gemコマンドの前にbundle exec-を付ける必要がある場合があることに注意してくださいrbenv
非対称

4
含めない理由はありますbrew uninstall libxsltか?
Nate Berkopec 2012年

5
この回答をコピーして貼り付ける場合、libxml2の最新バージョンは2.9.0です。コピーして貼り付けるときは必ずこれを編集してください。
Nate Berkopec 2013年

7
最後の文が重要であることを強調する必要があります。最初にnokogiriを要求するこれを行うには、Gemfileのnokogiriをレールの前に配置します。
Wolfram Arnold

28

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

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

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

  • brew uninstall libxml2 (以前にインストールされている場合)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (オプション)

3
これにより、libxml 2.7.8 /2.8.0を使用するOSX10.8.2で修正されました。のこぎりの宝石を取り外して再インストールするだけでは解決しませんでしたが、brew uninstall libxml2事前に解決しました。ありがとう!
ステレオ

1
自作を使用する場合の完璧な答え
awenkhh 2013

+1パーフェクト。重要なのは、nokogiriをインストールするときに、他のバージョンのlibxml2をインストールしないことです。
ネイトクック2013年

また、他の誰かがRubyMineである場合に備えて、これは、bundle installRubyMine内から発生したエラーを修正するのに役立ちました。次のように入力すると、コマンドラインで同じエラーが表示されますrake --tasks
Nate Cook

これは私にとって正しい解決策でした。私はMountainLionを実行していて、自作(およびIntellij IDEA)を使用しています。
duma 2013

16

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

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

4
フィードバックをありがとう、OldPro。SO特権に関するQ&Aを読み直すことを検討することをお勧めします。「ひどくずさんな、労力を費やさない投稿、または明らかにそしておそらく危険なほど間違っている答えに遭遇したときはいつでも、反対票を使用してください。」この回答は、OPを含む数人の人々に明らかに有効であったため、反対票を投じる必要はないと思います。
IAmNaN 2013年

1
最近発見されたCPU消費DOSの脆弱性(vuxml.org/freebsd/843a4641-9816-11e2-9c51-080027019be0.html)のため、FreeBSDでlibxml2を更新し、問題のnokogiri警告を引き起こしました。説明どおりに再インストールすると、問題が解決しました。
user569825 2013

OSX 10.8.5で私のために働いた
ステーキチェイサー2014年

1
いいえ、@ Tass。updateは、gemの新しいバージョンがあるかどうかをチェックするだけですが、この場合はありません。2年以上経ちましたが、アンインストールを実行せずに覚えているようです。アップデートはNOPでした。nokogiriのバージョンは変更されていないようですが、OSをアップグレードした後、ライブラリを別のヘッダーでコンパイルする必要があります。ちなみに、この方法は、OSXを何度か更新した後で機能しました。
IAmNaN 2014

9

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

source 'http://rubygems.org'
gem 'nokogiri'
gem 'rails', '3.0.20'
etc...

1
これが機能する理由の説明については、@ Jarrettによるこの回答を参照してください
Jared Beck

うん!「警告:NokogiriはLibXMLバージョン2.8.0に対してビルドされましたが、動的に2.7.8をロードしました」
Artem Aminov 2013年

4

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

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

 gem install nokogiri -- --use-system-libraries

2

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

私の場合、RVMがインストールされており、@ globalと@projectのgemセットがあります。どちらにもnokogiriがインストールされており、一方は異なるlibxmlでビルドされていました。

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

お役に立てれば..


1
gem uninstall nokogiri
bundle  #install nokogiri again

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

参考:私は、brewとbundleを使用してMountainLionを実行しています。



0

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

以下は私の完全な解決策です

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

sudo make uninstall

バンドルを削除する

rm -rf ~/.bundle ~/.bundler

更新されたLD(sudoではなくrootとしてこれを行う必要がある場合があります)

sudo ldconfig

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

bundle install

0

自分でこれに遭遇しただけです(OS X Lion10.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

説明は次のとおりです。「これは、Lionシステムのデフォルトのlibxml2(ブートストラップでロードされる)が使用されているために発生します。これは、どのlibxml2Nokogiriに対して構築されたかに関係ありません。」

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


0

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

このメッセージが表示され、nokogiriがgemソースから入手できるバージョンで古くなっている場合は、実行bundle update nokogiriして新しいコードを取得し、再コンパイルしてください。エラーはなくなるはずです。


0

OS:カタリナ

警告:警告nokogiriはlibxmlバージョン2.9.10に対してビルドされましたが、動的に2.9.4をロードしました

Michiel de Mareの 手順に従いましたが、brew install libxml2-with-xml2-configが無効なオプションエラーで失敗しました。そこで、libxml2とlibxsltをインストールし、両方のコマンドからの出力に注目しました。

 brew install libxml2                   
==> Downloading https://homebrew.bintray.com/bottles/libxml2-2.9.10_2.catalina.bottle.tar.gz
Already downloaded: /Users/alberto/Library/Caches/Homebrew/downloads/9ddf5cb90fd16a7eb531e37bb748fd392f30214d9fe1568b2b70d28cc368c8f7--libxml2-2.9.10_2.catalina.bottle.tar.gz
==> Pouring libxml2-2.9.10_2.catalina.bottle.tar.gz
==> Caveats
libxml2 is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libxml2 first in your PATH run:
  echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc

For compilers to find libxml2 you may need to set:
  export LDFLAGS="-L/usr/local/opt/libxml2/lib"
  export CPPFLAGS="-I/usr/local/opt/libxml2/include"

For pkg-config to find libxml2 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/libxml2/2.9.10_2: 280 files, 10.6MB

brew install libxslt
==> Downloading https://homebrew.bintray.com/bottles/libxslt-1.1.34.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cbadecf3186f45754220dff4cbdfbb576882a211d615b52249a4c9d8ba4d7c3a?response-content-disposition=attachment%3Bfil
######################################################################## 100.0%
==> Pouring libxslt-1.1.34.catalina.bottle.tar.gz
==> Caveats
To allow the nokogiri gem to link against this libxslt run:
  gem install nokogiri -- --with-xslt-dir=/usr/local/opt/libxslt

libxslt is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libxslt first in your PATH run:
  echo 'export PATH="/usr/local/opt/libxslt/bin:$PATH"' >> ~/.zshrc

For compilers to find libxslt you may need to set:
  export LDFLAGS="-L/usr/local/opt/libxslt/lib"
  export CPPFLAGS="-I/usr/local/opt/libxslt/include"

For pkg-config to find libxslt you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libxslt/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/libxslt/1.1.34: 136 files, 2.8MB

そして、nokogiriのバンドルを構成するときにそれらのディレクトリを使用しました

bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt

要約すると、私はこれらのステップを実行しました

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2
brew install libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt
bundle install
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.