Gcc libstdc++;确定依赖关系?

Gcc libstdc++;确定依赖关系?,gcc,libstdc++,Gcc,Libstdc++,在Linux上,我在同一台机器上构建了两个二进制文件A和B。我将它们带到另一台安装了稍旧的libstdc++的机器上。当我在二进制A上运行ldd-v时,我得到以下结果: libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3) => /usr/lib6

在Linux上,我在同一台机器上构建了两个二进制文件A和B。我将它们带到另一台安装了稍旧的libstdc++的机器上。当我在二进制A上运行ldd-v时,我得到以下结果:

libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6
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
当我在二进制B上运行ldd-v时,我得到以下结果:

libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6
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?更重要的是,如何确定是什么代码导致了这种依赖关系?

如果在可执行文件上运行
nm
,您将看到大量的符号,其中一些是未定义的(您可以告诉它们,因为它们在第一列中为空,在
nm
的默认输出的第二列中有一个
U

其中一些符号将有
@@which
后缀。这些后缀是这些符号的版本依赖关系,如果您在二进制B中查找
@@GLIBCXX_3.4.15
,应该会告诉您哪些特定符号导致您具有该版本依赖关系