linux - 如何从生成的二进制文件中查看哪些静态库用于 gcc/g++ 编译?

标签 linux compiler-construction g++ static-libraries cross-compiling

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

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

最佳答案

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

更一般地说,-v 通过 g++gcc 向您显示底层命令及其参数,因为 gcc或者g++只是一个驱动程序(启动cc1ld或者collect2as, ...)

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

您看不到链接了哪些静态库,因为链接静态库只是链接其中的相关目标文件成员,所以静态库只能(并且通常)链接到一部分。

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

关于linux - 如何从生成的二进制文件中查看哪些静态库用于 gcc/g++ 编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16862864/

相关文章:

c++ - 优化构造函数调用次数

linux - 什么是虚拟内存?

linux - 使用 awk 从 grep 匹配中提取文本并并排放置

c++ - Linux 共享库中全局变量的单个拷贝

linux - egrep : find lines with no characters

python - 如何在 PLY 中做一个 IF 语句?

c++ - 令人困惑的编译器错误

compiler-construction - 解释器实际上是否在内存中预编译?

c++ - boost 错误:变量 ‘timespec rqtp’具有初始化程序,但类型不完整

c++ - 如何用 MinGW 编译 SFML?