[解決済み] MacユーザーでWARNING: NokogiriはLibXMLバージョン2.7.8に対してビルドされましたが、2.7.3が動的にロードされています。
質問
いろいろと調べ、いろいろなことを試してきました。この質問が何度も回答されていることは承知していますが、提案された解決策はどれも私には効果がありません。
Lion にアップグレードした後、私は Ruby でセグメンテーションフォールトを得ました。私は、それが Nokogiri であることを確信しています。そこで、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の先頭にも入れてありますし、環境ファイルにも必要です。なぜまだその警告が出るのか全くわかりません。
正しいバージョンの libxml2 をロードしていることを確認するために、何か提案やアイデアはありますか?
どのように解決するのですか?
私は午前中の大半を費やして、この警告を解決しました。 この修正は 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
は、MacPorts 経由で libxml2 がインストールされた Snow Leopard 用です。
Lion では、libxml2 はブートストラッププロセスの一部としてロードされます。 Nokogiri がどの libxml2 を指しているかに関係なく、Lion のシステムデフォルトの libxml2 のライブラリが実行時に使用されます。 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のロード方法にはもっと別のものがあることがわかります。 とにかく、これでエラーはなくなりました。
もう一度言いますが、これは Lion 専用です。 以前の修正は Snow Leopard でも機能します。
これで回答は終わりです。 ここで読むのをやめてください。
OK、あなたは読むのをやめませんでしたね...さて...
お勧めしません!!!!!!!
あなたは警告されています。 Mac OSX がブートストラップで libxml2 ライブラリを読み込んでいるかどうかは
/usr/lib
. の全バージョンをコピーするようなことをしてください。
libxml2*.dylib
を
libxml2*.dylib.old
(私のマシンでは、これは
libxml2.2.7.3
,
libxml2.2
と
libxml2
).
この後、Nokogiriを実行しても、エラーは発生しません。 これは、ロードされたlibxml2が見つからないため、環境のパスをたどり、最終的に
libxml2.2.7.8
で
/opt/local
.
しかし、古い libxml ファイルをコピーして戻すことはできません。 これは、OS がブートストラップでロードされた libxml2 を必要とするためです。
電源を切り、再び電源を入れると、マシンがレンガ状態になります。 ログイン画面はハングアップし、ハングアップし、ハングアップします。 シングルユーザーモードで電源を切り、再度電源を入れる (ホールド コマンド - S を再起動しながら)。 ブートストラップが発生する様子を見ることができます。 驚くなかれ、libxml2 をロードできないというエラーを投げて、動作を停止しています。
電源を切り、もう一度電源を入れます。 今度はリカバリー モードで起動します (または
コマンド
-
R
またはホールド
オプション
を押して、リカバリディスクを選択します)。 リカバリーモードでターミナルを開く(
utilities/terminal
). マウント
/usr/lib
をHDにマウントしてください(試しに
/Volumes/Macintosh\ HD/usr/lib
を試してみてください)、libxml2 ファイルをコピーして戻してください。 再起動すれば、すべてうまくいきます。
関連
-
[解決済み] なぜsumはinject(:+)よりもずっと速いのですか?
-
[解決済み] Ubuntu 14.04にRuby 2.1.4をインストールする方法
-
[解決済み] インストールされているすべてのGemsを削除して最初からやり直す
-
[解決済み] RubyのREPLを開くコマンドは何ですか?
-
[解決済み] Capybaraで要素の正確なテキストをマッチングして要素を見つける方法
-
[解決済み] Ruby で改行せずに印刷する方法
-
[解決済み] Rubyの配列で同じ文字列の要素をカウントする方法
-
[解決済み] Rubyで文字列中のある文字の出現回数を検索する
-
[解決済み] Rubyでディレクトリを再帰的にリストアップするためのワンライナー?
-
[解決済み] Rubyです。変数を文字列にマージする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyでシングルクォートとダブルクォートを使い分けるとパフォーマンスが上がりますか?
-
[解決済み] Rubyの継承とミキシンの比較
-
[解決済み] Rubyでモジュール変数を作成する
-
[解決済み] 今月の名前(Date.today.monthをnameに変換)。
-
[解決済み] Rubyで「逆レンジ」を繰り返し処理できないのはなぜですか?
-
[解決済み] Ruby文字列のgsubメソッドとsubメソッドの違いについて
-
[解決済み] Ruby 配列を関数の引数に変換する
-
[解決済み] 配列要素のインデックスを O(n) よりも高速に取得する。
-
[解決済み] Rubyで配列の最後の要素を取得するには?
-
[解決済み] WindowsへのRubyGemsのインストール