GCCコンパイラ時の4段階説明!


GCCを使用してプログラムのコンパイルを行う場合、通常は4つのフェーズ(通常はソースプログラムから実行可能なバイナリコードまでのプロセス全体を指す)を経験し、hello.cを例に4つのフェーズを説明します.
hello.c
#include<stdio.h>
int main()
{
   printf("Hello World!
");    return 0; }

GCCの4段階は以下の通りである.
1.前処理段階
2.コンパイルフェーズ
3.アセンブリフェーズ
4.リンクフェーズ
4つのフェーズの詳細は次のとおりです.
1.前処理段階
実行プログラム:cpp
役割:(1)ソースプログラムで定義したマクロを展開します.(2)ソースプログラムにincludeに含まれるファイルなどを挿入します.
実行方法:gcc–E hello.c –o hello.i
実行結果:接尾辞名は.iのファイル、例えばhello.i
2.コンパイルフェーズ
実行プログラム:ccl作用:コードの規範性、文法エラーがあるかどうかを確認し、前処理したファイルを可読アセンブリコードにコンパイルする.
実行方法:gcc–S hello.i –o hello.s
実行結果:接尾辞名は.sのファイル、例えばhello.s
3.アセンブリフェーズ
実行プログラム:as作用:アセンブリ段階を生成する.sファイルは、特定のcpu上のターゲットコードにアセンブリされます.
実行方法:gcc-c hello.s –o hello.o
実行結果:接尾辞を生成する.oのファイル、例えばhello.o
4.リンクフェーズ
実行プログラム:ld
作用:アセンブリ段階で生産する.oファイルは関連するターゲットコードとリンクし、実行可能なバイナリファイルを生産する
実行方法:gcc hello.o –o hello
実行結果:helloなどの実行可能なバイナリファイルを生成
まとめ:
ステージ
プログラム
gccオプション
入力ファイル
出力ファイル
プリプロセッシング
cpp
-E
.cまたはその他(hello.c)
.i(hello.i)
コンパイル
ccl
-S
.i(hello.i)
.s(hello.s)
アセンブル
as
-c
.s(hello.s)
.o(hello.o)
リンク
ld
なし
.o(hello.o)