2012-12-22 14 views
7

コードをコンパイルすると、オブジェクトファイルが生成されます。そのオブジェクトファイルから、実行可能ファイルがリンクプロセスで生成されます。実行ファイルを生成するためにオブジェクトファイルが必要なのはなぜですか?

なぜオブジェクトファイルが必要ですか?オブジェクトファイルの使用は何ですか?実行可能ファイルが直接生成される可能性はありますか?結局、実行可能ファイルを使ってプログラムを実行しています。

答えて

11

オブジェクトファイルは、リンカーが完全な実行可能ファイル(またはライブラリ)を構築するために使用するファイルです。

通常、コンパイラは出力を直接 "直接"実行できますが、構文はコンパイラによって異なります。 GCCと例えば:

gcc foo.c bar.c ... 

は残ります実行していない中間オブジェクトファイルを生成します( - 、その後、削除されたが、1つは、おそらく生成されています)。

オブジェクトファイルは、インクリメンタルビルドに使用されます。各ソースファイル(またはソースファイルのグループ)をオブジェクトファイルにコンパイルし、それらをすべて実行可能ファイルにリンクします。これにより、最後にビルドしてから変更されたソースファイルのみを再コンパイルすることができ、潜在的に多くの時間を節約できます。
同じオブジェクトファイルを使用して、異なる実行可能ファイルをリンクすることもできます(実行可能ファイルと共有ライブラリの両方を生成するためにビルドの一部を再利用する)ことができ、毎回すべてをコンパイルするのに比べて時間とリソースを節約できます。

オブジェクトファイルは理論的な観点から「必要」ではありません。それらは非常に実用的です(実際には、(ほとんどの)ツールチェーンで技術的に必要なのは、アセンブラがどのように作成してリンクするかをリンカが知っているものです)。

関連する問題