上下文:我正在使用 linux 工具链(包括 g++
、其他构建工具、库、 header 等)来构建带有静态链接库的代码。我想确保我只使用我的工具链中的库/ header ,而不是构建机器上的默认库/ header 。我可以使用 strace
查看 g++ 在编译时正在做什么(它正在使用哪些库) 在正常情况下会有帮助 - 但我的构建系统有很多隐藏所有输出的 g++ 包装器。
问题:有没有办法从静态链接的二进制文件中获取有关用于创建二进制文件的库和头文件的任何有用信息?我查看了 objdump
工具,但我不确定它是否会有很大帮助。
最佳答案
只需在链接时将-v
传递给g++
或gcc
。它将显示所有链接的库。也许试试 make CC='gcc -v' CXX='g++ -v'
更一般地说,-v
通过 g++
或 gcc
向您显示底层命令及其参数,因为 gcc
或者g++
只是一个驱动程序(启动cc1
,ld
或者collect2
,as
, ...)
通过将 -H
标志传递给 GCC(即 g++
或 gcc
),您可以看到每个包含的 header 。因此,您可以检查是否仅包含您期望的 header 。
您看不到链接了哪些静态库,因为链接静态库只是链接其中的相关目标文件成员,所以静态库只能(并且通常)链接到一部分。
您可以使用 nm
命令从此类库中查找名称。
关于linux - 如何从生成的二进制文件中查看哪些静态库用于 gcc/g++ 编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16862864/