在启用优化的情况下,我在使用 GCC for ARM 时遇到了一个非常奇怪的问题。在没有优化的情况下编译我的 C++ 应用程序会生成一个在运行时输出预期结果的可执行文件。一旦我打开优化 - 即 -O1 - 我的应用程序就无法产生预期的结果。我尝试了几天来发现问题,但我一无所知。我从我的代码中消除了任何未初始化的变量,我纠正了严格别名可能导致问题的地方,但我仍然没有得到正确的结果。
我正在为 ARM 使用 GCC 4.2.0(处理器是 ARM926ej-s)并在 Montavista Linux 发行版上运行该应用程序。
以下是我正在使用的标志:
-O1 -fno-unroll-loops fno-merge-constants -fno-omit-frame-pointer -fno-toplevel-reorder \
-fno-defer-pop -fno-function-cse -Wuninitialized -Wstrict-aliasing=3 -Wstrict-overflow=3 \
-fsigned-char -march=armv5te -mtune=arm926ej-s -ffast-math
只要我去掉 -O1 标志并重新编译/重新链接应用程序,我就会得到正确的输出结果。正如您从标志中看到的那样,我试图禁用任何优化,我认为它可能会导致问题,但仍然没有运气。
有没有人对我如何进一步解决这个问题有任何指示?
谢谢