【问题标题】:What will effect the compling result of gcc?什么会影响 gcc 的编译结果?
【发布时间】:2014-06-17 06:35:29
【问题描述】:

我正在使用工具“EA”(电加速器)来加速我的项目的编译。我发现使用EA和不使用EA编译C源文件的结果是不同的(在同一台机器上,分布式编译是禁用的)。传递给 GCC 的编译选项是相同的。而且,这只发生在使用“-O2”时。如果我使用“-O1”编译文件,obj文件是一样的。通过分析汇编代码,我发现使用EA生成的代码也是正确的。显然,EA 会影响 gcc 的编译结果。这要怎么解释?

【问题讨论】:

  • 也许它在将源文件传递给 gcc 之前在内部更改了源文件(出于优化原因)?你能检查一下吗?

标签: gcc compilation


【解决方案1】:

您对编译输出的意思不准确?如果您的意思是生成的汇编代码。在优化级别(即-O1 -O2)方面,它会因编译器而异。这就是为什么你会得到不同的代码。我认为这取决于如何调整编译器来优化 . this 可能会对您有所帮助。

【讨论】:

  • 我的意思是gcc生成的obj文件(.o)是不同的。然后我用objdump反汇编了obj文件,发现有些汇编代码不一样。不管有没有 EA,我总是通过相同的编译选项。此问题仅在使用“-O2”时发生。谢谢。
  • 当使用-O2编译器被通知优化。并且编译器优化使用代码重新排列、循环展开等作为方法来做到这一点。所以所有这些,你可以期望代码看起来与你编写它的方式不同,因为编译器基本上会获取你的代码并重新排列它以提高效率。
【解决方案2】:

我知道这是一个旧线程,但是对于 EA,有一个因素可以产生不同的目标文件...

如果您希望 .o(或任何其他派生对象)看起来像,则代理计算机上用于构建的工具和库必须与构建计算机上的完全相同相同相同。请记住,eMake 将 makefile 中目标的配方中的命令提供给远程代理,如果编译器、库等的版本与构建机器上的版本不同,则加速构建的结果会有所不同从没有加速的构建运行。

【讨论】:

    猜你喜欢
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2021-04-25
    • 1970-01-01
    • 2015-12-19
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多