确定 ELF 二进制文件是否经过优化构建

identify whether an ELF binary is built with optimizations

我知道我们可以使用 cmake 或 make 来控制 CFLAGSCXXFLAGS 手动构建发布版本。 release 版本对我来说意味着至少给出了 -O2-O3,执行 -gstrip 并不重要,而 debug 给出 -O0.

但有时我想使用脚本来确定 elf 二进制文件是否是通过优化构建的,这样我就可以决定下一步该做什么。我尝试了 objdumpfilereadelf,但没有找到答案。有什么替代方法可以做到这一点吗?

However sometimes I want use scripts to decide whether an elf binary was built with optimizations, so I can decide what to do next.

您问题的问题是您的二进制文件很可能包含 一些 优化代码(例如 crt0.o -- GLIBC 的一部分)。

您最终的二进制文件由一堆目标文件组成,这些文件不需要具有一致的优化标志。

很可能您只关心您编写的代码(而不是从其他库链接的代码)。您可以为此使用 -frecord-gcc-switches。参见 this answer