上下文:我正在使用linux工具链(包括g++
,其他构建工具,库,头文件等)来构建具有静态链接库的代码。我想确保我只使用工具链中的库/头文件,而不是构建机器上的默认库。我可以使用strace
来查看g ++在做什么(它正在使用哪些库),同时编译哪些在正常场景中会有用 - 但是我的构建系统有许多围绕g ++的包装器隐藏所有输出。
问题:有没有办法从静态链接的二进制文件中获取有关用于创建二进制文件的库和头文件的任何有用信息?我已经看了objdump
工具,但我不确定它是否有用。
答案 0 :(得分:1)
在链接时将-v
传递给g++
或gcc
。它将显示所有链接的库。也许试试make CC='gcc -v' CXX='g++ -v'
更一般地说,-v
传递g++
或gcc
会显示基础命令及其参数,因为gcc
或g++
只是一个驱动程序(开始) cc1
,ld
或collect2
,as
,...)
通过将-H
标记传递给GCC(即g++
或gcc
),您可以看到每个包含的标头。所以你可以检查只包括你期望的那些人。
您无法看到已链接的静态库,因为链接静态库只意味着链接其中的相关目标文件成员,因此静态库可以(通常是)仅部分链接。
您可以使用nm
命令从这些库中查找名称。
答案 1 :(得分:1)
如果你可以简单地重新编译,那么有一些方法(使用Basile解释的一些技术)来获取头文件和库(静态或动态),但不幸的是,没有办法知道在使用了哪些库之后编译完成。