在 Linux 上,我在同一台机器上构建了两个二进制文件 A 和 B。我将它们带到另一台安装了稍旧的 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。
问题是:ldd 通过什么机制确定二进制 B 依赖于 GLIBCXX_3.4.15?更重要的是,我如何确定是什么代码导致了这种依赖关系?