GCCコンパイラによるc言語のコンパイル

1713 ワード

GCCコンパイルCソースコードには、前処理->コンパイル->アセンブリ->リンクの4つのステップがあります.
GCCのパラメータを利用して実行するプロセスを制御することができ、Cプログラムをコンパイルするプロセスをより深く理解することができます.
次に、1つのプログラムのコンパイルにより、プロセス全体を説明します.
#include 

int main()
{
    printf("happy new year!
"
); return 0; }

1:前処理:コンパイラはCプログラムのヘッダファイルをコンパイルし、マクロの置換もあり、gccのパラメータ-Eで参照することができる.
前処理命令:gcc-E hello.c -o hello.i
作用:hello.c前処理出力hello.i
2:コンパイル:この段階のコンパイラは主に文法分析、文法分析、意味分析などを行い、間違いがないことを検査した後、コードをアセンブリ言語に翻訳する.gccのパラメータ−Sを用いて参照することができる.
コンパイラ(ccl)はテキストファイルhello.iテキストファイルに翻訳するhello.sは、アセンブリ言語プログラムを含む.アセンブリ言語プログラムの各文は、標準的なテキストフォーマットで低レベルのマシン言語命令を記述します.
コンパイルコマンド:gcc-S hello.i -o hello.s
役割:前処理出力ファイルhello.i編成hello.sファイル
3:アセンブリ:コンパイルフェーズを生成する.sファイルはバイナリターゲットコードに変換されます.gccのパラメータ−cを用いて参照することができる.アセンブリ(as)はhello.s機械言語命令に翻訳し、これらの命令を再位置決め可能なターゲットプログラムのフォーマットにパッケージし、結果をターゲットファイルhelloに保存する.oの中.hello.oファイルはバイナリファイルであり、バイト符号化は機械言語である.
アセンブリコマンド:gcc-c hello.s -o hello.o
作用:作用:アセンブリ出力ファイルhello.sコンパイル出力hello.oファイル
4:リンク:objファイルを実行可能なファイルにリンクする:リンク器(ld)が担当する.oファイルの組み込み.その結果、helloファイルは、メモリにロードした後にシステムによって呼び出される授業で実行されるターゲットファイルです.
リンクコマンド:gcc hello.o -o hello
一歩操作すると:(-oはhelloの前にしなければならない)
$gcc hello.c -o hello
$./hello

または:(a.outファイルがデフォルトで生成されます)
$gcc hello.c
$./a.out