如何确定libstdc ++依赖项?

时间:2012-02-29 00:14:54

标签: 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

当我在二进制B上运行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?更重要的是,如何确定导致此依赖性的代码?

1 个答案:

答案 0 :(得分:2)

如果你在可执行文件上运行nm,你会看到大量的符号,其中一些是未定义的(你可以告诉它们,因为它们在第一列中是空白的并且有一个{{1}在U的默认输出的第二列中。)

其中一些符号会有nm个后缀。这些后缀是这些符号的版本依赖性,如果您在二进制B中查找@@whatever,那么应该告诉您哪些特定符号导致您具有该版本依赖性。