我已从 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 中进行版本更改之前需要检查的完整列表,那就太好了。(因为这会影响性能和功能。)
gcc -Q -v
仅使用一个基本的小型 c 或 cpp 文件作为输入文件。应该给你一个默认传递给 gcc 的所有选项的大列表,其中一个可能会导致 sse fp math 被启用。
除了编译特定文件
-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
。
除了用于特定于目标的选项的
-Q --help=target
之外,您还可以使用 -Q -O<n> --help=optimize
来显示在给定优化级别打开或关闭的优化器传递。 -Q
似乎也可以单独与其他 --help=<blah>
参数一起使用。
我这里的 gcc 4.3.3 版本没有您所抱怨的行为。 我自己编译了它,所以我很确定您所看到的更改肯定还有另一个原因,而不仅仅是 gcc 版本(例如一直使用 sse AFAIR 的 64 位编译)。
gcc 具有通知行为更改的发行说明。 它们与 gcc 源代码分发包一起打包,并可在网络上获取。 对于 gcc 4.3,请参阅 http://gcc.gnu.org/gcc-4.3/changes.html.