コードをコンパイルすると、オブジェクトファイルが生成されます。そのオブジェクトファイルから、リンクプロセスで実行可能ファイルが生成されます。
なぜオブジェクトファイルが必要なのですか?オブジェクトファイルの用途は何ですか?実行可能ファイルを直接生成することはできませんか?結局のところ、プログラムを実行するために実行可能ファイルを使用しています。
コードをコンパイルすると、オブジェクトファイルが生成されます。そのオブジェクトファイルから、リンクプロセスで実行可能ファイルが生成されます。
なぜオブジェクトファイルが必要なのですか?オブジェクトファイルの用途は何ですか?実行可能ファイルを直接生成することはできませんか?結局のところ、プログラムを実行するために実行可能ファイルを使用しています。
オブジェクトファイルは、リンカが完全な実行可能ファイル(またはライブラリ)を構築するために使用するものです。
通常、コンパイラに実行可能ファイルを「直接」出力させることができます。構文はコンパイラによって異なります。たとえば、GCCの場合:
gcc foo.c bar.c ...
実行可能ファイルが生成され、中間オブジェクトファイルは残りません(ただし、おそらく1つが生成され、その後削除されます)。
オブジェクトファイルは、インクリメンタルビルドを作成するために使用されます。各ソースファイル(またはソースファイルのグループ)をオブジェクトファイルにコンパイルしてから、それらすべてを実行可能ファイルにリンクします。これにより、最後にビルドしてから変更されたソースファイルのみを再コンパイルできるため、時間を大幅に節約できる可能性があります。
または、同じオブジェクトファイルを使用して異なる実行可能ファイルをリンクし(ビルドの一部を再利用して、実行可能ファイルと共有ライブラリの両方を生成するなど)、毎回すべてをコンパイルする場合に比べて時間とリソースを節約できます。
理論的な観点からは、オブジェクトファイルは「必要」ではありません。それらは非常に実用的です(実際には、いくつかの(ほとんどの?)ツールチェーンで技術的に必要です。アセンブラーが生成方法を知っていて、リンカーがリンク方法を知っているものです)。