GCC:使用链接器使用-O3优化标志

时间:2016-08-10 10:28:03

标签: gcc optimization g++

我在Linux 14.04 x64上使用g ++ 4.8.4。我在编译和链接期间使用-O3和-flto标记编译我的项目,即我的Makefile中的CFLAGS和LDFLAGS都有这些选项。

我刚刚发现,当涉及到float / double的计算时,优化的二进制文件表现不同(即错误地)。仅从LDFLAGS中删除-O3似乎正在解决问题。

我记得在某处读过,通常可以安全地为编译器和链接器指定相同的优化标志集。我理解错了吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

使用LTO时,编译期间的编译器会将中间代码表示(a.k.a. GIMPLE)转储到目标文件的特殊部分。

在链接阶段实际编译到机器代码和优化。

所以,是的,如果您的代码导致UB或仅使用-O3选项进行了错误优化,如果您将其更改为-O0,-Og等,则其行为可能会有所不同(如预期)

所以你必须弄清楚是你的代码行为不端,还是实际的GCC LTO错误