我正在使用 GCC 4.4.2 构建一些大型项目。因为我想为发布而构建它,所以我使用了 -O1
GCC 优化标志,但不幸的是它以某种方式混淆了我的代码,并且最终的二进制文件在使用 - 构建时没有按预期工作O0
标志(或无优化)一切正常。
我之前的项目也遇到过类似的问题,当时是 -fstrict-aliasing
标志导致了 -O2
优化级别的问题,我设法找到了它是由该特定标志引起的,通过搜索本文档中提到的所有标志,关于 -O2
优化级别:
http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Optimize-Options.html
现在我尝试对他们提到的关于 -O1
标志的列表做同样的事情,但不幸的是似乎并不是所有提到的标志,或者有一些隐藏的标志被启用,因为当我仅使用 -O1
标志或仅使用提供的标志列表进行编译(不放置 -O1
本身)我得到不同的编译结果,我的二进制文件仅拒绝工作带有特定的 -O1
标志,所以我找不到确切的麻烦选项。
是否有可能知道 -O1
选项包含哪些隐藏选项,以及如何禁用其中的一些选项?
最佳答案
您可以在一个小的 C 文件上运行 gcc -Q -v
让 GCC 转储正在使用的选项。
使用和不使用 -O1
选项运行它,以了解启用选项之间的差异。
关于c - 不可见的 GCC 优化标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21218231/