【问题标题】:How can you determine optimization level from file?如何从文件中确定优化级别?
【发布时间】:2012-02-02 00:34:14
【问题描述】:

我有一个已编译的 elf 文件,我想验证使用的优化级别。问题是如何确定对象/精灵的优化级别?

我尝试过使用“file”命令和“objdump”(大多数开关),但没有一个显示这一点。有可能吗?

【问题讨论】:

  • 最近的 GCC 接受#pragma GCC optimize,因此优化级别可能会从一个函数变为另一个。所以你的问题甚至没有确切的含义。
  • 我明白了。这种优化背后的原因是什么?
  • 我不明白你的问题。 #pragma GCC optimize 可以更改所需的优化级别。你可以使用它,例如请求某些特定函数总是在-O2 中编译,即使源文件的其余部分在-O0 -g 中编译
  • 你为什么要问?编译器应该“透明地”进行优化,因为它们不会影响程序的含义。
  • 我只是问优化特定功能的实际用途是什么,而不是其他功能。但是我从您提供的调试示例中看到,因此在调试期间您优化了一些关键功能。

标签: linux object elf


【解决方案1】:

不,一般来说不是。编译器不会将其活动的“优化”设置写入目标文件,也不一定可以从目标代码本身来确定。

【讨论】:

  • 谢谢。我希望它可以做到这一点。那我必须解决这个问题。
  • 有时您可以在 .cmets 部分查看编译器和链接器的命令行选项。使用 ARM RVCT 工具时,我认为“fromelf -v”会转储显示命令行的 cmets 部分,但我不确定 objdump/elfdump 或其他工具是否这样做
  • 这很不幸。我想编写一个可以轻松告诉我优化级别的脚本。解释原因:我现在正在考虑哪些程序要通过 -O2 编译,哪些程序要通过 -O3 编译。但是再编译几百个程序就很容易迷失方向……
【解决方案2】:

strings foo.o | grep -- -O 可能会给你你想要的。

【讨论】:

  • 完美解决方案!
  • 这可靠吗?或者可能存在不起作用的情况?至少比上面的两个“答案”要好。很高兴知道上述情况的效果如何;如果没有,为什么不呢。编辑:刚试过。不幸的是,我在许多二进制文件中都没有得到 -O 的任何结果。例如,在将 -O3 用于“文件”之后,我看不到上面的结果。 :(
猜你喜欢
  • 2015-10-21
  • 2012-09-21
  • 2016-08-09
  • 2013-03-10
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
相关资源
最近更新 更多