[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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を探 しにいったということでしょうか?