我从gcc 4.0.3版本升级到4.3.3版本,并发现在gcc 4.3.3中,默认将-mfpmath设置为sse,这实际上导致了我的应用程序出错。 在4.0.3中,-mfpmath是387。
我想知道如何获取gcc为给定版本启用的所有默认选项。 我该如何转储gcc编译时使用的所有选项集。 这使我能够比较版本4.0.3和4.3.3。
通常情况下,在进行gcc版本更改之前,需要检查的综合列表将非常有帮助。(因为这会影响性能和功能。)
我从gcc 4.0.3版本升级到4.3.3版本,并发现在gcc 4.3.3中,默认将-mfpmath设置为sse,这实际上导致了我的应用程序出错。 在4.0.3中,-mfpmath是387。
我想知道如何获取gcc为给定版本启用的所有默认选项。 我该如何转储gcc编译时使用的所有选项集。 这使我能够比较版本4.0.3和4.3.3。
通常情况下,在进行gcc版本更改之前,需要检查的综合列表将非常有帮助。(因为这会影响性能和功能。)
gcc -Q -v
只需一个基本的 C 或 CPP 文件作为输入文件,就可以获得由 GCC 默认传递的所有选项的大列表,其中之一可能会导致启用 SSE 浮点数运算。
除了编译指定文件-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版本引起的(比如编译为64位,一直都使用sse)。
gcc有发布说明,通知行为变化。它们与gcc源代码分发一起打包,并可在网上获得。对于gcc 4.3,请参见http://gcc.gnu.org/gcc-4.3/changes.html。