2011-11-05 12 views
19
私はGCCとのアセンブリの代わりに、実行可能ファイルをコンパイルするにはどうすればよい

でアセンブリにコンパイルすることができます。私は-Sフラグがあることを知っていますが、どこでmakefileで使用しますか?たとえば、フラグ-O3 -o exe_nameを使用する場合は、どこに-Sフラグを付ける必要がありますか?は、どのように私はgccの

+2

あなたは、オブジェクト・ファイルの代わりに、アセンブリを意味していますか? – Hogan

答えて

17

その後、生成されたアセンブラコードを「説明」いくつか生成されたコメントを持っているので、私は-fverbose-asmを使用しても示唆しています。

GCCの最適化が何をしているのかを理解するためには、-fdump-tree-allを試すこともできます(ただし、これは,個のファイルを生成します)。

21

あなたは代わりにオブジェクトファイル(または実行)の、アセンブリファイルを生成するためにGCCを求めることができます。例えば

gcc -Wall -c test.c 

はtest.cの(test.o)からオブジェクトファイルを生成します。

gcc -Wall -o test test.c 

は(test.s)test.cのからアセンブリファイルを生成します

gcc -Wall -S test.c 

test.cのから 'テスト' という名前の実行ファイルを生成します

+4

あなたは*アセンブリに*コンパイル*してから*オブジェクトファイルに*アセンブル*してください。例えば、私のシステム上の '-S'のドキュメンテーションは、' '適切なコンパイルの段階の後に停止します。組み立てないでください。 –

+2

組み立てに「コンパイル」しないのはなぜですか?それはまさにそれがやっていることです!コンパイル!アセンブリーコードをアセンブリーするには!コンパイルした後は、0-1または手紙で書くだけです。 – Shahbaz

+2

私の意見では、コンパイルとは、ソースコードをマシンコードに変換することです。アセンブリはマシンコードに非常に近い場合でもソースコードです。 – Macmade

12

はどこでもかなりそれを入れてください。

gcc -O3 -S -o output.asm ... 

output.asmで生成assembyを格納します。

+2

は '、それは出力ファイルの名前を選んだにしたいあなたのことのみ必要です。 –

+1

必要があると思いませんので、-S'がfilename.s''のような何かを書き込み、デフォルトで – Mat

+0

最後に簡単な答え...ありがとう! – dbkoren