コンパイラの基本的な実行の流れ
Sponsored Links
皆さんこんにちは
お元気ですか?私はげんきです。
さて、今日はコンパイラの一連の流れについてご紹介します。
コンパイラは4つの段階に処理が別れており、これらが終了すると実行プログラムを生成します
前処理→コンパイル→アゼンブル→リンクの順番です。
コンパイルの処理について
前処理
コメントの除去やプリプロセッサの置換+includeのファイルを含むような作業を行う。
前処理の前
#include<iostream> #define 100 using namespace std; int main(void){ //足す cout << 100 + define << endl; }
前処理の後
[iostream]のファイル using namespace std; int main(void){ cout << 100 + 100 << endl; }
因みに以下のコマンドを打つと実際に動作するコードを確認することができます。
g++ -E temp.cpp
コンパイル
アゼンブリ言語で表現されているアゼンブラプログラムを生成する。
Cppで記載されている内容→アゼンブラプログラムを生成
以下のコマンドでアゼンブラのコードを確認することができます。
g++ -S temp.cpp
リンク
オブジェクトファイル同士を結合させて実行ファイルを生成する。
実体のないオブジェクトファイルを生成した場合、ここでリンクさせることによって別のオブジェクトファイルから実体を呼び出し、実行ファイルを生成します。
コマンドは以下のようなイメージで
gcc test.o -o test
つまり、オブジェクト+オブジェクト+オブジェクト+オブジェクト=実行ファイル
のようなことを行っています。
このように4つの処理を得て、プログラムはコンパイルされますが…
実際の使い方は次のお話