現在C言語を学習しています。
ソースファイルから実行ファイルが作成されるまでどういった処理が行われているのか。
コンパイルの具体的な手順について、調べたことを忘れないうちにメモしておこうと思います。
コンパイルの処理手順
C++のコンパイル手順ですが凄く分かりやすくまとめられた画像があったのでお借りしました。
プリプロセス
まずはじめに、プリプロセッサによってプリプロセスという処理が行われます。
ライブラリを読み込む#include命令やマクロを定義する際に用いる#defineを展開するなど、#からはじまるプリプロセッサ指令を処理するようです。
他には、コンパイル条件によってソースコードを部分的に選択したり、コメントを削除を行います。
コンパイル
次に、コンパイラによってC言語のソースファイルをアセンブリ言語のソースファイルに変換されます。
この処理を行うプログラムを狭義のコンパイラ、プリプロセスからリンカまでのコンパイル全体を処理するプログラムを広義のコンパイラというようです。
アセンブル
次は、アセンブラによってアセンブリ言語のソースファイルを機械語のオブジェクトファイルに変換されます。
機械語なのでコンピュータが理解できる表現形式になっていますが、この段階ではまだ正常に実行するための情報が足りていません。
リンク
最後に、リンカによってオブジェクトファイルとライブラリなどが結合されます。
これによって、オブジェクトファイルは実行可能形式になります。
gccではオプションを指定することで、コンパイルの途中で処理を止めることができるようなので、実際にいろいろ試してみようと思います。
参考文献
プリプロセス – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
この記事を読んだ人はこんな記事も読んでいます。
【C言語】コンパイルの具体的な処理手順