Cのコンパイラとリンカーの違いは何ですか?
コンパイラーは、人間が読めるプログラミング言語で記述されたコードを、プロセッサーが理解できるマシンコード表現に変換します。この手順により、オブジェクトファイルが作成されます。
コンパイラーによってこのステップが完了すると、呼び出して実行できる作業実行可能ファイルを作成するために、別のステップが必要になります。つまり、コンパイルされたコードが機能するために呼び出す必要がある関数呼び出し(たとえば)を関連付ける必要があります。たとえば、C標準ライブラリのルーチンであるsprintf
をコードで呼び出すことができます。あなたのコードはsprintf
によって提供される実際のサービスを行うものは何もありません。それはそれが呼び出されなければならないことを報告するだけですが、実際のコードは共通Cライブラリのどこかに存在します。この(および他の多くの)リンケージを実行するには、linkerを呼び出す必要があります。リンクした後、実行可能な実際の実行可能ファイルを取得します。
コンパイラは、ソースコードからオブジェクトコードファイル(機械語)を生成します。
linker は、これらのオブジェクトコードファイルを実行可能ファイルに結合します。
多くのIDEがそれらを連続して呼び出すため、実際にリンカーが動作しているのを見ることはありません。一部の言語/コンパイラーには別個のリンカーがなく、リンクはコンパイラーによってその作業の一部として行われます。