終了時に競合が発生するC ++で書かれたアプリケーションがあります。競合の原因は、同じライブラリの他のバージョンへの参照が実行可能ファイルに混在していることです。これは私たちが追跡しようとしているエラーなので、これを助けるために実行可能ファイルがクラッシュしたときに生成されたメモリマップダンプを利用できるようにしたいです。
以下はメモリマップの関連部分です。
7ffff5bc7000-7ffff5ccc000 r-xp 00000000 00:38 2348051668 /devel/utility/release/lib64/libUtils.so
7ffff5ccc000-7ffff5ecc000 ---p 00105000 00:38 2348051668 /devel/utility/release/lib64/libUtils.so
7ffff5ecc000-7ffff5ece000 r--p 00105000 00:38 2348051668 /devel/utility/release/lib64/libUtils.so
7ffff5ece000-7ffff5ed2000 rw-p 00107000 00:38 2348051668 /devel/utility/release/lib64/libUtils.so
7fbbf73c3000-7fbbf73ee000 r--p 00000000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf73ee000-7fbbf7462000 r-xp 0002b000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf7462000-7fbbf747e000 r--p 0009f000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf747e000-7fbbf747f000 ---p 000bb000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf747f000-7fbbf7481000 r--p 000bb000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf7481000-7fbbf7483000 rw-p 000bd000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
このセクションでは、同じ実行可能ファイルの異なる部分がファイルシステム内のライブラリの異なるバージョンにリンクされていることを示します。一致するコアダンプファイルもあります。私の質問は次のとおりです。
実行時に実行コードのどのシンボルがこのメモリマップからライブラリの各バージョンにリンクされているかを確認できますか?それとも、実行可能ファイル自体でこれを行う方法はありますか?
実行可能ファイルはlibUtils.soのコードを直接使用しますが、独自にlibUtils.soを使用できる他のライブラリとも関連付けられます。そのうちの1つがリリースインスタンスではなくv6.6インスタンスに接続されていると推測して追跡しています。
実行可能ファイルの ldd -rv は両方のリストを表示しますが、そのリストのソースを確認するには不十分です。私たちはリリースビルドが実行可能ファイルの直接コンパイルとリンクから来ていることを知っていますが、v6.6インスタンスが導入された場所を追跡しようとしています。
ldd -rv の出力を減らします。
**/devel/utililty/release/lib64/libUtils.so (0x00007f0576b29000)**
liblog4cplus-1.1.so.9 => /lib64/liblog4cplus-1.1.so.9 (0x00007f0575fcb000)
libsigc-2.0.so.0 => /lib64/libsigc-2.0.so.0 (0x00007f0575b8e000)
libGL.so.1 => /lib64/libGL.so.1 (0x00007f057479a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f057457e000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f0574276000)
libm.so.6 => /lib64/libm.so.6 (0x00007f0573f73000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0573d5d000)
libc.so.6 => /lib64/libc.so.6 (0x00007f057399a000)
libboost_thread-mt.so.1.53.0 => /lib64/libboost_thread-mt.so.1.53.0 (0x00007f0573782000)
libboost_system-mt.so.1.53.0 => /lib64/libboost_system-mt.so.1.53.0 (0x00007f057357e000)
**libUtils.so => /devel/utility/v6.6/lib64/libUtils.so (0x00007f05730a1000)**