web-dev-qa-db-ja.com

コンパイラとリンカの違いは何ですか?

Cのコンパイラとリンカーの違いは何ですか?

38
smruti

コンパイラーは、人間が読めるプログラミング言語で記述されたコードを、プロセッサーが理解できるマシンコード表現に変換します。この手順により、オブジェクトファイルが作成されます。

コンパイラーによってこのステップが完了すると、呼び出して実行できる作業実行可能ファイルを作成するために、別のステップが必要になります。つまり、コンパイルされたコードが機能するために呼び出す必要がある関数呼び出し(たとえば)を関連付ける必要があります。たとえば、C標準ライブラリのルーチンであるsprintfをコードで呼び出すことができます。あなたのコードはsprintfによって提供される実際のサービスを行うものは何もありません。それはそれが呼び出されなければならないことを報告するだけですが、実際のコードは共通Cライブラリのどこかに存在します。この(および他の多くの)リンケージを実行するには、linkerを呼び出す必要があります。リンクした後、実行可能な実際の実行可能ファイルを取得します。

73
Stefano Borini

コンパイラは、ソースコードからオブジェクトコードファイル(機械語)を生成します。

linker は、これらのオブジェクトコードファイルを実行可能ファイルに結合します。

多くのIDEがそれらを連続して呼び出すため、実際にリンカーが動作しているのを見ることはありません。一部の言語/コンパイラーには別個のリンカーがなく、リンクはコンパイラーによってその作業の一部として行われます。

26
Oded