当前位置: 首页 > 面试题库 >

从编译的可执行文件中获取编译器选项?

钦耀
2023-03-14
问题内容

有没有办法查看在*
nix中使用了哪些编译器和标志来创建可执行文件?我已经编译了一个旧版本的代码,我想看看它是经过优化还是未经优化而编译的。Google并没有太大的帮助,但是我不确定我使用的关键字是否正确。


问题答案:

gcc -frecord-gcc-switches为此提供了一个选项:

   -frecord-gcc-switches
       This switch causes the command line that was used to invoke the compiler to
       be recorded into the object file that is being created.  This switch is only
       implemented on some targets and the exact format of the recording is target
       and binary file format dependent, but it usually takes the form of a section
       containing ASCII text.

之后,ELF可执行文件将包含.GCC.command.line带有该信息的部分。

$ gcc -O2 -frecord-gcc-switches a.c
$ readelf -p .GCC.command.line a.out

String dump of section '.GCC.command.line':
  [     0]  a.c
  [     4]  -mtune=generic
  [    13]  -march=x86-64
  [    21]  -O2
  [    25]  -frecord-gcc-switches

当然,如果没有该选项编译的可执行文件将无法使用。

对于简单的优化情况,如果文件是使用调试信息编译的,则 可以 尝试使用调试器。如果稍稍进行,可能会注意到一些变量已被“优化”。这表明发生了优化



 类似资料:
  • 问题内容: 在kivy论坛中没有得到回应,因此请在这里尝试。 当我将教程pong代码编译为一个文件可执行文件时,我仍然必须将pong.kv文件包含在同一文件夹中才能运行。否则,启动exe时出现以下错误: 如何使它作为一个可执行文件运行。这是我的pong.spec文件: 请注意,我尝试将pong.kv包括在数据列表中,但这没有帮助。 谢谢,-Raj 问题答案: 根据KeyWeeUsr提供的链接(将数

  • 以下是我的cmake代码: 我尝试从链接中合并步骤,但没有工作,并得到以下错误: /usr/bin/ld:尝试动态对象的静态链接`/usr/lib/x86_64-linux-gnu/libglu.so'collect2:错误:ld返回1退出状态src/cmakefiles/wwest-export-app.out.dir/build.make:774:recipe for targe'bin/ww

  • 问题内容: 我刚刚使用Eclipse编写了一个简单程序,并且想将其编译为可执行文件,但似乎根本找不到如何执行的方法。 问题答案: 你可以通过以下方式将.jar文件转换为.exe: 1- JSmooth .exe包装器: JSmooth是Java可执行包装器。它为Java应用程序创建本机Windows启动器(标准.exe)。由于它能够自行查找任何已安装的Java VM,因此它使Java部署更加流畅和

  • 由于IntelliJ,我发现需要将以下选项传递给:

  • 问题内容: 我在一个项目上使用JAXB。JAXB的吸引力在于它与JDK捆绑在一起,我一直在命令行上使用xjc.exe从架构生成.java文件。我似乎找不到JAXB ant任务,请确保在http://jaxb.java.net上有下载,但是我想使用捆绑到JDK中的JAXB,是否有某种方法可以从ant调用JAXB? xjc.exe调用的类? 问题答案: 刚刚在tools.jar中打猎,并在com.su