リンカとは
リンカ(Linker)とは、プログラミングにおいて、ソースコードを翻訳(コンパイル)して作成された「オブジェクトファイル(中間データ)」や、外部の「ライブラリ」などを一つにつなぎ合わせ(リンクし)、最終的なコンピュータが実行できるファイル(実行ファイル)を作成するプログラムのことです。プログラムの開発では、コードが大きくなると複数のファイルに分けて記述したり、共通処理として用意されている外部のプログラム(ライブラリ)を利用したりします。これらをパズルのように正しく組み上げて、一つの動くアプリとして完成させるのがリンカの役割です。
具体例
例えば、あなたが作ったメイン処理のオブジェクトファイル「main.obj」と、画面に文字を出す共通プログラムが入ったライブラリ「stdio.lib」があるとします。リンカはこれら2つのファイルを結合し、お互いの呼び出し関係を整理して、最終的な実行ファイル「app.exe」を生成します。
もう少し詳しく
現代のソフトウェア開発において、一つの巨大なソースコードファイルだけで全てのプログラムを記述することは稀です。通常は、機能ごとにファイルを分割して開発を行い、後からそれらを統合する手法がとられます。各ソースコードはコンパイラによって「オブジェクトファイル(.obj や .o といった拡張子を持つ中間ファイル)」に翻訳されますが、この状態ではまだ単独で実行することはできません。なぜなら、別のファイルに書かれた関数や、OSが提供する共通機能(画面表示やファイル保存など)への「呼び出し先(アドレス)」が、この時点では「仮の場所」として未解決のままになっているからです。
ここで登場するのが「リンカ(連係編集プログラムとも呼ばれます)」です。リンカは、複数のオブジェクトファイルと、あらかじめ用意された便利な部品の集まりである「ライブラリ」を一つにまとめ上げます。その際、各ファイル間にまたがる関数やデータの呼び出し関係を整理し、メモリ上のどこにどのプログラムが配置されるかという「アドレス(番地)」を正確に割り当て直す(アドレス解決)という極めて重要な作業を行います。このリンカによる結合(リンク)作業が完了して初めて、OS上でダブルクリックして起動できる最終的な「実行ファイル(ロードモジュールや .exe ファイルなど)」が誕生するのです。
なお、リンクの方式には、実行ファイルを作成する段階ですべてのモジュールを完全に結合してしまう「静的リンク」と、プログラムの実行時に必要なライブラリだけを随時メモリに読み込んで結合する「動的リンク(ダイナミックリンク)」の2種類があります。動的リンクを利用すると、実行ファイルのサイズを大幅に小さくでき、メモリの節約にもつながります。
試験でのポイント
基本情報技術者試験などのIT国家試験では、プログラムが作成されてから実行されるまでの「言語処理のプロセス(流れ)」を問う問題が頻出します。ソースコードは、「コンパイラ」によってオブジェクトモジュール(目的プログラム)に翻訳され、次に「リンカ」によって他のモジュールやライブラリと結合(リンク)されてロードモジュール(実行ファイル)になり、最後に「ローダ」によってメモリ上に配置されて実行される、という一連の順序を正確に暗記しておくことが必須です。
問題文の中で「複数の目的モジュールを結合して、一つのロードモジュールを生成するプログラム」と説明されていれば、それはリンカ(連係編集プログラム)が正解です。また、動的リンクに関する問題として、Windowsの「DLL(Dynamic Link Library)」という用語とともに、実行時にリンクを行う仕組みが出題されることもあります。
関連する用語
関連する用語として、ソースコードをオブジェクトファイルに翻訳する「コンパイラ」、リンカによって結合される部品の集まりである「ライブラリ」、完成した実行ファイルをメインメモリに読み込んで実行可能状態にする「ローダ」があります。