Linux上的C ++,确认库中的代码没有静态链接到生成的可执行文件中

时间:2013-12-05 13:39:37

标签: c ld

Linux上的C ++,我正在构建一个先前链接到静态库(.a)的可执行文件,我已经更新了构建,现在它动态地链接到这个库(.so)。我想确认此库中的代码不再静态链接到可执行文件中。我希望能够通过比较静态链接和动态链接的可执行文件的nm输出来确认这一点,但这些之间存在很多差异,这将是手动确认这种方式...想知道是否有更好的任何人都可以推荐的方式?

1 个答案:

答案 0 :(得分:1)

nm命令。它列出了模块功能。 运行nm命令并grep一个你知道在lib /中的函数。 如果它是动态链接的(所以库),你会看到它的“U”属性。

示例(构成perl路径):

nm /bin/perl | grep fprintf

输出:

U fprintf@@GLIBC_2.2.5

注意: ldd对于了解您是否依赖于SO非常有用。但是这个SO可能是另一个SO的依赖。 在某些情况下,您可以获得链接到二进制文件的库的静态和动态版本,从而导致可怕的内存问题(通常被视为double free错误)。