Linux では、同じマシン上に A と B の 2 つのバイナリをビルドしました。少し古い libstdc++ がインストールされた別のマシンに移動します。バイナリ AI で ldd -v を実行すると、次のようになります。
libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6
バイナリ BI で ldd -v を実行すると、次のようになります。
libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6
libstdc++.so.6 (GLIBCXX_3.4.15) => not found
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6
GLIBCXX_3.4.15 の依存関係が見つからないことに注意してください。インストールされた libstdc++ は GLIBCXX_3.4.10 までしかサポートしていないため、これは理にかなっています。
問題は、バイナリ B が GLIBCXX_3.4.15 に依存していると ldd が判断するメカニズムは何ですか? さらに重要なのは、この依存関係を引き起こしているコードを特定するにはどうすればよいですか?