SSブログ

LD_LIBRARY_PATH 指定の順番に気をつける ーパッケージ管理ツールを過信するなー

ー 超基本的な事かもしれないが。(恥ずかしながら)ハマってしまったので注意喚起の意味を込めて記載。

Android の SDK のデバッグツールをいじってたら、以下のログを出力して壮大にご臨終召された。

java: symbol lookup error: /usr/lib/libgnomevfs-2.so.0: undefined symbol: xmlTextReaderConstName

エラーを訴えているライブラリは ELF ファイルだし、CLASSPATH の問題じゃなさそうだ。環境変数 LD_LIBRARY_PATH がいけないのかなー
→ $ export PATH=${PATH}:/usr/lib
→ # /sbin/ldconfig
→ 再現

そもそも、ライブラリが足りないのかな?
→ 足りないと言われているシンボル (xmlTextReaderConstName) を含むライブラリを含むパッケージをインストール。案の定無かった。
→ でも、再現

え? 何がいけないの? ライブラリあるのにシンボルを参照してないってことは ...

$ ldd /usr/lib/libgnomevfs-2.so.0
linux-gate.so.1 => (0xb77e6000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb776f000)
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb776a000)
libgconf-2.so.4 => /usr/lib/libgconf-2.so.4 (0xb7737000)
libxml2.so.2 => /home/xxx/yyy/cvsroot-wgn/airone-debug/lib/libxml2.so.2 (0xb76b0000)
libdbus-glib-1.so.2 => /usr/lib/libdbus-glib-1.so.2 (0xb7694000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0xb765c000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb7620000)
libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0xb7582000)
libavahi-glib.so.1 => /usr/lib/libavahi-glib.so.1 (0xb757f000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb74ca000)
libavahi-common.so.3 => /usr/lib/libavahi-common.so.3 (0xb74be000)
libavahi-client.so.3 => /usr/lib/libavahi-client.so.3 (0xb74ae000)
libresolv.so.2 => /lib/i686/cmov/libresolv.so.2 (0xb7499000)
libutil.so.1 => /lib/i686/cmov/libutil.so.1 (0xb7495000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb747c000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7321000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb731d000)
librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7314000)
libORBit-2.so.0 => /usr/lib/libORBit-2.so.0 (0xb72c0000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb729a000)
libnsl.so.1 => /lib/i686/cmov/libnsl.so.1 (0xb7281000)
libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb7271000)
libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0xb726d000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7257000)
libgcrypt.so.11 => /usr/lib/libgcrypt.so.11 (0xb71ef000)
libpcre.so.3 => /usr/lib/libpcre.so.3 (0xb71c6000)
/lib/ld-linux.so.2 (0xb77e7000)


libxml2.so.2 がアサッテなパスのライブラリを参照している。
なんぞ!? と思いながら ~/.bashrc を見てみると、次の一分が飛び込む

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib:${AIRCOLLECTORDIR}/lib:/usr/local/h8tools/lib:${AIRDIR}/lib"

別の開発環境のライブラリパスが /usr/lib のより先に来ている事が問題みたい。

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib:/usr/local/lib:${AIRCOLLECTORDIR}/lib:/usr/local/h8tools/lib:${AIRDIR}/lib"

こうして、bash 再起動して検索キャッシュを再構築したら解決した。
『パッケージ管理ツールで入れたから大丈夫』と、過信してはいけない。

<教訓 : LD_LIBRARY_PATH 指定の順番に気をつける >
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Haskell で行列計算|- ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。