【问题标题】:gcc 4.3.3 compiler options enabled by defaultgcc 4.3.3 编译器选项默认启用
【发布时间】:2011-03-09 11:25:16
【问题描述】:

我已经从 gcc 版本 4.0.3 移动到 4.3.3 并意识到 -mfpmath 在 gcc 4.3.3 中默认设置为 sse。这实际上导致了我的应用程序中的错误。 在 4.0.3 中,-mfpmath 为 387。

我想知道如何获得 gcc 为给定版本启用的所有默认选项。 如何在编译时转储 gcc 使用的所有选项集。 这使我能够比较 4.0.3 和 4.3.3 版本。

一般来说,如果我能知道在 gcc 中进行版本更改之前需要检查的完整列表,那就太好了。(因为这会影响性能和功能。)

【问题讨论】:

    标签: c++ gcc optimization compiler-construction


    【解决方案1】:
    gcc -Q -v
    

    只需一个基本的小 c 或 cpp 文件作为输入文件。应该给你一个默认传递给 gcc 的所有选项的大列表,其中一个可能会导致启用 sse fp 数学。

    【讨论】:

    • gcc -Q -v 的两个输出有什么区别:“选项通过”和“选项启用”?
    【解决方案2】:

    除了-Q --help=target 用于特定于目标的选项之外,您还可以使用-Q -O<n> --help=optimize 来显示在给定优化级别上哪些优化器通道处于打开或关闭状态。 -Q 似乎也可以与其他 --help=<blah> 参数一起使用。

    【讨论】:

      【解决方案3】:

      除了编译一个特定的文件-Q -v,它会输出传递和启用的选项列表,以及许多其他版本、配置和时间信息,你还可以使用gcc -Q --help=target来列出默认值特定于目标的编译器选项:

      $ gcc --version | head -1
      gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
      $ gcc -Q --help=target
      The following options are target specific:
        -m128bit-long-double                  [disabled]
        -m32                                  [disabled]
        -m3dnow                               [disabled]
        -m3dnowa                              [disabled]
        -m64                                  [enabled]
        -m80387                               [enabled]
        -m8bit-idiv                           [disabled]
        -m96bit-long-double                   [enabled]
        -mabi=
        -mabm                                 [disabled]
        -maccumulate-outgoing-args            [disabled]
        -maes                                 [disabled]
        -malign-double                        [disabled]
        -malign-functions=
        -malign-jumps=
        -malign-loops=
        -malign-stringops                     [enabled]
        -mandroid                             [disabled]
        -march=                               x86-64
      ...
      

      要同时包含目标特定的汇编器和链接器选项列表(但当前不是它们的默认设置),请使用--target-help 而不是--help=target。

      【讨论】:

        【解决方案4】:
        1. 我这里的 gcc 4.3.3 版本没有您抱怨的行为。我自己编译了它,所以我很确定你所看到的变化肯定还有另一个原因,而不仅仅是 gcc 版本(比如为一直使用 sse AFAIR 的 64 位编译)。

        2. gcc 有发布说明,通知行为更改。它们与 gcc 源代码分发包一起打包,可在网络上获得。对于 gcc 4.3,请参阅 http://gcc.gnu.org/gcc-4.3/changes.html。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-24
          相关资源
          最近更新 更多