看看下面的命令行:
gcc -o hello -Wall -D_BSD_SOURCE hello-world.c
Run Code Online (Sandbox Code Playgroud)
现在,有没有办法通过对“hello”可执行文件进行一些处理来了解这些选项。
可悲的是没有。但是如果你在创建二进制文件之前考虑一下,有一些方法。这是另一个。使用最近的 gcc,您可以使用 -frecord-gcc-switches 选项,该选项将向 ELF 文件添加一个部分,其中包含您正在寻找的描述。
$ gcc -frecord-gcc-switches -o hello -Wall -D_BSD_SOURCE hello-world.c
$ readelf -p .GCC.command.line hello
String dump of section '.GCC.command.line':
[ 0] -D _BSD_SOURCE
[ f] hello-world.c
[ 1d] -mtune=generic
[ 2c] -march=x86-64
[ 3a] -Wall
[ 40] -frecord-gcc-switches
Run Code Online (Sandbox Code Playgroud)
如您所见,它显示了所有使用的选项,而不仅仅是您明确提供的选项。