1

上下文:我正在使用 linux 工具链(包括g++、其他构建工具、库、头文件等)来使用静态链接库构建我的代码。我想确保我只使用我的工具链中的库/头文件,而不是构建机器上的默认库/头文件。我可以strace在编译时查看 g++ 正在做什么(它正在使用哪些库),这在正常情况下会有所帮助 - 但我的构建系统有许多围绕 g++ 的包装器,它们隐藏了所有输出。

问题:有没有办法从静态链接的二进制文件中获取有关用于创建二进制文件的库和头文件的任何有用信息?我已经查看了该objdump工具,但我不确定它是否会有很大帮助。

4

2 回答 2

1

只需传递-vg++gcc在链接时。它将显示所有链接的库。也许尝试make CC='gcc -v' CXX='g++ -v'

更一般地说,-v传递g++gcc显示带有参数的底层命令,因为gccorg++只是一个驱动程序(开始cc1ldcollect2,,as...)

通过将-H标志传递给 GCC(即g++gcc),您可以看到每个包含的标头。因此,您可以检查是否仅包含您期望的标头。

您无法看到已链接的静态库,因为链接静态库仅意味着链接其中的相关目标文件成员,因此静态库可以(通常是)仅部分链接。

您可以使用该nm命令从此类库中查找名称。

于 2013-06-01T04:38:11.900 回答
1

如果您可以简单地重新编译,那么有一些方法(使用 Basile 解释的一些技术)来获取头文件和库(静态或动态),但不幸的是,在编译完成后无法知道使用了哪些库.

于 2014-05-20T06:06:50.730 回答