我正在使用 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
选项包含哪些隐藏选项,以及如何禁用其中一些选项?
1 回答
您可以在小型C文件上运行
gcc -Q -v
以使GCC转储正在使用的选项 . 使用和不使用-O1
选项运行它以获取启用选项之间的差异 .