2009年10月23日

[debian-users:53220] Re: バージョンの異なる同一ソフトが2つ同時に存在する不具合の解消方法について

大坪です。お世話になっています。

>
> てことは、wvstreams をビルドしたときに、/opt/hoge にインストールされた
> dbus のライブラリが正常に検出されていない(よって、ちゃんとリンクされていない)
> のに、wvstreams が正常にビルドされた「ように終了してしまった」か、インストール
> したバージョンの dbus では、`dbus_message_set_serial'、`dbus_message_lock'、
> `dbus_message_demarshal_bytes_needed' という三つの関数がサポートされて

> いない、ということになるんでしょうか。はてさて...
> --

(1)dbus_message_set_serialが入っているsoファイルの見当をつけるために、
# ldd /opt/hoge/lib/libwvdbus.so
linux-gate.so.1 => (0xb7fda000)
libwvstreams.so.4.6 => not found
libwvutils.so.4.6 => not found
libwvbase.so.4.6 => not found
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0xb7f6a000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7f51000)
librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7f48000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7f33000)
libreadline.so.5 => /lib/libreadline.so.5 (0xb7f00000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e12000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7dec000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7ddf000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7c84000)
/lib/ld-linux.so.2 (0xb7fdb000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7c51000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7c4d000)

# ldconfig /opt/hoge/lib/

# ldd /opt/hoge/lib/libwvdbus.so
linux-gate.so.1 => (0xb7f05000)
libwvstreams.so.4.6 => /opt/hoge/lib/libwvstreams.so.4.6 (0xb7dfe000)
libwvutils.so.4.6 => /opt/hoge/lib/libwvutils.so.4.6 (0xb7cd2000)
libwvbase.so.4.6 => /opt/hoge/lib/libwvbase.so.4.6 (0xb7c49000)
libdbus-1.so.3 => /opt/hoge/lib/libdbus-1.so.3 (0xb7c0f000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7bf6000)
librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7bed000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7bd8000)
libreadline.so.5 => /lib/libreadline.so.5 (0xb7ba6000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7ab7000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7a91000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7a84000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7929000)
libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb78e2000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb778f000)
libpam.so.0 => /lib/libpam.so.0 (0xb7783000)
libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb7751000)
/lib/ld-linux.so.2 (0xb7f06000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb771f000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb771b000)

(2)そこで/opt/hoge/lib/libdbus-1.soにはdbus_message_set_serialが入っているかを確かめる。
# nm /opt/hoge/lib/libdbus-1.so |grep dbus_message_set_serial
0001cea0 T dbus_message_set_serial

(3)そこでdbus_message_set_serialが含まれているwvstreams-4.6.1展開ディレクトリ内のファイルを探す。
# grep -Ri dbus_message_set_serial wvstreams-4.6.1/
バイナリー・ファイルwvstreams-4.6.1/libwvstatic.aは一致しました
wvstreams-4.6.1/dbus/wvdbusmarshal.cc: dbus_message_set_serial(msg, ++global_serial);
バイナリー・ファイルwvstreams-4.6.1/dbus/wvdbusmarshal.oは一致しました
バイナリー・ファイルwvstreams-4.6.1/libwvdbus.soは一致しました
バイナリー・ファイルwvstreams-4.6.1/libwvdbus.so.4.6は一致しました

(4)次にwvdbusmarshal.cc内でdbus_messageが含まれている行を探す。
# grep -Ri dbus_message wvstreams-4.6.1/dbus/wvdbusmarshal.cc
static int wvdbus_message_length(const char *buf, size_t len)
int msglen = dbus_message_demarshal_bytes_needed(buf, len);
size_t messagelen = wvdbus_message_length((const char *)
DBusMessage *_msg = dbus_message_demarshal((const char *)
dbus_message_unref(_msg);
return wvdbus_message_length((const char *)alignedbuf.peek(0, used), used);
if (!dbus_message_get_serial(msg))
dbus_message_set_serial(msg, ++global_serial);
dbus_message_lock (msg);
dbus_message_marshal(msg, &cbuf, &len);

(5)従って、dbus_message_set_serial dbus_message_lock dbus_message_demarshal_bytes_needed 以 外にdbus_message_demarshal dbus_message_marshal 等が含まれている。そこで、
# nm /usr/lib/libdbus-1.so |grep dbus_message_demarshal
nm: /usr/lib/libdbus-1.so: no symbols
# nm /opt/hoge/lib/libdbus-1.so |grep dbus_message_demarshal
0001b860 T dbus_message_demarshal
00017e60 T dbus_message_demarshal_bytes_needed

# nm /usr/lib/libdbus-1.so |grep dbus_message_marshal
nm: /usr/lib/libdbus-1.so: no symbols
# nm /opt/hoge/lib/libdbus-1.so |grep dbus_message_marshal
0001cba0 T dbus_message_marshal

(6)これらより、pathfinderのmakeの際に、/opt/hoge/lib/libdbus-1.soではなく
/usr/lib/libdbus-1.soを探 しにいったということでしょうか?


投稿者 xml-rpc : 2009年10月23日 15:42
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/89633
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。