Gccバージョン4.0.3から4.3.3に移行しましたが、gcc4.3.3では-mfpmathがデフォルトでsseに設定されていることに気付きました。これは実際に私のアプリケーションでエラーを引き起こしました。 4.0.3では、-mfpmathは387でした。
特定のバージョンでgccによって有効にされているすべてのデフォルトオプションを取得する方法を知りたいです。コンパイル中にgccが使用するすべてのオプションのセットをダンプするにはどうすればよいですか。これにより、バージョン4.0.3と4.3.3を比較できます。
一般に、gccのバージョン変更を行う前に、チェックする必要があるものの包括的なリストを知ることができれば素晴らしいでしょう(これはパフォーマンスと機能に影響を与えるためです)。
gcc -Q -v(入力ファイル)
入力ファイルとして基本的な小さなcまたはcppファイルだけを使用します。デフォルトでgccに渡されるすべてのオプションの大きなリストが表示されるはずですが、そのうちの1つがsse fpmathを有効にしている可能性があります。
渡されたオプションと有効なオプションのリスト、および他の多くのバージョン、構成、タイミング情報を出力する特定のファイル-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
を使用します。
私がここに持っているgcc4.3.3のバージョンは、あなたが不満を言っている振る舞いをしていません。私はそれを自分でコンパイルしたので、gccバージョンだけでなく(常にsse AFAIRを使用していた64ビット用にコンパイルするなど)、表示されている変更には別の理由があるはずです。
gccには、動作の変更を通知するリリースノートがあります。これらはgccソース配布とともにパッケージ化されており、Webで入手できます。 gcc 4.3については、 http://gcc.gnu.org/gcc-4.3/changes.html を参照してください。
ターゲット固有のオプションの-Q --help=target
に加えて、-Q -O<n> --help=optimize
を使用して、特定の最適化レベルでどのオプティマイザーパスがオンまたはオフになっているかを表示できます。 -Q
は、他の--help=<blah>
引数でも単独で機能するようです。