代码之家  ›  专栏  ›  技术社区  ›  celavek

GCC优化导致应用程序失败

  •  2
  • celavek  · 技术社区  · 15 年前

    在启用优化的情况下,使用GCC for ARM会遇到一个非常奇怪的问题。 在没有优化的情况下编译我的C++应用程序生成一个可执行文件 在运行时输出预期结果。一旦我打开 优化-也就是-o1-我的应用程序无法产生预期的结果。 我试了几天来找出这个问题,但我一无所知。 我从代码中消除了所有未初始化的变量,并更正了 严格的别名可能会导致问题,但我仍然没有正确的结果。

    我将GCC4.2.0用于ARM(处理器是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标志并重新编译/重新链接应用程序,我就得到了正确的输出结果。从标记中可以看到,我试图禁用任何优化,我认为这可能会导致问题,但仍然没有运气。

    有人对我如何进一步解决这个问题有什么建议吗?

    谢谢

    4 回复  |  直到 15 年前
        1
  •  8
  •   DevSolar    15 年前

    -ffast-math

    -O1 -ffast-math

        2
  •  2
  •   Paul R    15 年前

    -ffast-math -O1

        3
  •  1
  •   Stack Overflow is garbage    15 年前

    i = i++

        4
  •  1
  •   Eamon Nerbonne    15 年前

    -ffast-math -O1