リンカローダとコンパイラの主な違いは、リンカはコンパイラが生成した1つまたは複数のオブジェクトファイルを1つの実行ファイルに結合することである。
一方、ローダーはプログラムをメモリに配置し、実行の準備をする一方、コンパイラーはソースコードをオブジェクトコードに変換する。
コンピュータプログラムは、コンピュータが実行するときに特定のタスクを実行する命令の集合体です。
システムソフトは、他のソフトウェアにプラットフォームを提供するコンピュータプログラムの一種です。
リンカ、ローダ、コンパイラの3つがコンピュータ・プログラミングに関連するシステム・ソフトウェアです。
コンパイラとは
プログラムとは、ある作業を実行するための命令の集合体です。
ソースコードとも呼ばれる。
プログラマーはソースコードを理解することができますが、CPUは理解することができません。
そのため、ソースコードを機械が理解できる形式に変換する必要がある。
コンパイラは、この工程で使用される特殊なソフトウェアです。
ソースコードをオブジェクトコードに変換する。
このオブジェクトコードは中間コードです。
CPUが直接実行することはできない。
リンカーとは
ソースコードをオブジェクトコードに変換した後、リンカーはリンク作業を行います。
リンカーは、コンパイラーが生成した1つまたは複数のオブジェクトファイルを受け取り、それらを結合して実行可能なファイルを生成します。
図2:リンカー
さらに、オブジェクト・コードとライブラリの結合も行う。
例えば、C言語のプログラムで、数値の平方根を計算するsqrt()関数があれば、リンカーはプログラムと数学ライブラリをリンクさせる。
最後に、CPUは生成された実行ファイルを読んで理解することができる。
したがって、CPUはそのファイルを実行し、プログラムで定義されたタスクを実行することができる。
ローダーとは
ローダーは、プログラムをメモリ上に配置し、実行するための準備をします。
プログラムを起動する際に重要なコンポーネントです。
ローダーには、実行ファイルの内容を読み込んでメモリに配置するなどの作業が含まれます。
さらに、実行ファイルを実行するための準備として必要な作業を行う。
ロード完了後、OSはロードされたプログラムコードに制御を渡してプログラムを起動する。
図3:コンパイル
ほとんどのOSは、プログラムをロードするためのローダーをサポートしています。
ほとんどのシステムでは、ローダーはメモリ内に配置されますが、仮想メモリをサポートする他のシステムでは、ローダーはページング可能なメモリ領域に配置されます。
リンカローダとコンパイラの違い
定義
リンカーは、コンパイラーによって生成された1つまたは複数のオブジェクトファイルを取り込んで、1つの実行可能ファイルに結合するコンピュータユーティリティプログラムです。
ローダーとは、オペレーティングシステムの一部で、プログラムをメモリにロードする役割を担っています。
コンパイラは、あるプログラミング言語で書かれたコンピュータのコード(ソースコード)を別のプログラミング言語(ターゲットコード)に変換するソフトウェアです。
このように、リンカローダとコンパイラの主な違いを説明します。
機能性
また、リンカーは複数のオブジェクトコードを結合し、ライブラリとリンクさせます。
一方、ローダーは実行ファイルを作成し、コンパイラーはソースコードをオブジェクトコードに変換する。
これがリンカー・ローダーとコンパイラーの機能的な違いです。
結論
リンカローダとコンパイラの違いを簡単に説明すると、リンカはコンパイラが生成した1つまたは複数のオブジェクトファイルを1つの実行ファイルに結合し、ローダはプログラムをメモリに配置し実行の準備を行い、コンパイラはソースコードをオブジェクトコードに変換する、ということである。