检测二进制文件的GCC编译时标志
Detect GCC compile-time flags of a binary
有没有办法找出编译特定二进制文件时使用的gcc标志?
快速查看GCC文档不会发现任何内容。
Boost团队是一些最聪明的C++开发人员,他们采用命名约定,因为这通常是不可能的(毕竟,可执行文件可以用任何数量的语言、任何数量的编译器版本创建)。
(稍后添加):如果在编译代码时被要求,GCC在4.3中具有此功能:
一种新的命令行交换机-frecord-gcc交换机。。。导致用于调用编译器的命令行记录到正在创建的对象文件中。此录制的确切格式取决于目标和二进制文件格式,但通常采用包含ASCII文本的注释部分的形式。
实验证明:
diciu$ gcc -O2 /tmp/tt.c -o /tmp/a.out.o2
diciu$ gcc -O3 /tmp/tt.c -o /tmp/a.out.o3
diciu$ diff /tmp/a.out.o3 /tmp/a.out.o2
diciu$
我认为这是否定的,因为二进制文件是相同的。
我是最初让Brian发布这篇文章的人。我的问题与桑巴舞二进制有关。我发现您可以运行smb -b
来获取有关它是如何构建的信息。
我不这么认为。
您可以看到它是否有调试符号,这意味着使用了-g;)但我想不出如何找出哪些目录被用来搜索include头。
如果你只针对一个特定的旗帜,也许更好的答案是可能的;例如,如果您只想知道在编译该二进制文件时是否设置了标志"…"。在这种情况下,这将是什么旗帜?
相关文章:
- 即使使用调试编译标志,表达式也是"optimized out"
- 在 CMake 中添加全局编译标志
- 如何在 clang 的自动会议中检查支持编译标志
- CMake:如何在Visual Studio环境中将依赖于模式的编译标志传递给nvcc
- 使用 -O1 优化标志编译项目时共享库崩溃
- Valgrind 标志,调试与发布编译
- CMake:替换接口目标的编译标志
- 是否可以使用 GCC 编译具有特定编译器标志的代码文件的一部分?
- 为什么在编译过程中尽管有 -I(破折号大写 i)标志,但仍会出现未定义的引用错误?
- 当自动编译对象文件时,如何使我的makefile使用我的cflags标志
- 使用 c++11 标志交叉编译 OpenWRT
- Unix 宏在使用 -std=c++0x 标志编译时变得未定义
- 使用 -O2 或 -O3 标志编译时未捕获异常
- 未使用调试器标志编译的代码出现分段错误
- 如何使用-g调试标志编译boost
- 在不同的编译单元中使用不同的编译标志编译相同的头
- GCC的调试标志(编译阶段/链接阶段)
- 是否有任何方法可以发现静态库是用-fPIC标志编译的?
- 使用-g gcc标志编译的程序比不使用-g编译的程序慢
- 使用c++0x标志编译wxWidgets