最終更新日:2026年9月3日
fe fe-technology programming linker
まず結論
リンカ(Linker)とは、複数の目的モジュールやライブラリを結合して、実行できる形にまとめるソフトウェアです。
基本情報技術者試験では、まず次の2つを切り分けます。
実行前に結合する
→ 静的リンキング
実行時に必要になったときに結合する
→ 動的リンキング
覚える一文はこれです。
結合するのがリンキング。実行前なら静的、実行時なら動的。
また、似た選択肢は次のように切ります。
1行ずつ解釈・実行する
→ インタプリタ
必要な部分だけ主記憶へ入れる
→ オーバレイ
目的モジュールやライブラリを結合する
→ リンキング
直感的な説明
プログラムを「本体」と「部品」に分けて考えると分かりやすいです。
プログラム本体
+
ライブラリ
これらをつなぐ処理がリンキングです。
静的リンキング
実行する前に、必要な部品をあらかじめつないでおきます。
プログラム本体
+
ライブラリ
↓
実行前に結合
↓
実行可能なプログラム
↓
実行
イメージは、「完成品を作ってから動かす」です。
動的リンキング
プログラムを実行している途中で、必要になった部品を結合して利用します。
プログラムを実行
↓
ライブラリが必要になる
↓
そのとき結合
↓
利用
イメージは、「使うときにつなぐ」です。
定義・仕組み
リンカの役割
コンパイラで作られた目的モジュールは、単独では外部の関数やライブラリを参照できないことがあります。
リンカは、その参照先を対応付けて、複数の部品をまとめます。
ソースコード
↓ コンパイル
目的モジュール
↓ リンク
ロードモジュール
↓ ロード
主記憶上で実行
リンカが行う重要な処理の一つが、相互参照の解決です。
目的モジュールA
→ 目的モジュールBの関数を参照
リンカ
→ 参照先を対応付ける
静的リンキング
静的リンキングは、プログラムの実行前に必要な目的モジュールやライブラリを結合する方式です。
実行前に結合
→ 静的リンキング
試験では、「実行ファイルの生成時」「あらかじめ結合」などの表現が手掛かりになります。
動的リンキング
動的リンキングは、プログラムの実行時に必要なモジュールやライブラリを結合して利用する方式です。
実行時に結合
→ 動的リンキング
共有ライブラリなどを利用するときに使われる考え方です。
試験では細かなOSごとの実装よりも、いつ結合するかを押さえることが重要です。
静的リンキングと動的リンキングの比較
| 観点 | 静的リンキング | 動的リンキング |
|---|---|---|
| 結合する時点 | 実行前 | 実行時 |
| 試験での決め手 | あらかじめ結合 | 必要になった時点で結合 |
| イメージ | 作ってから実行 | 実行しながら必要な部品をつなぐ |
英語でも、次のように対応させると覚えやすいです。
static linking
→ before execution
dynamic linking
→ at run time
公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、用語の説明を読んで該当する方式を選ぶ問題として出題されます。
まず「何をしているか」を見る
| 問題文のキーワード | 選ぶ用語 |
|---|---|
| ソースコードを1行ずつ解釈・実行 | インタプリタ |
| 必要な部分だけ主記憶へ読み込む | オーバレイ |
| 目的モジュールやライブラリを結合 | リンキング |
| 実行前に結合 | 静的リンキング |
| 実行時に結合 | 動的リンキング |
| ロードモジュールを主記憶へ読み込む | ローダ |
「結合」と「実行時」が同時に出たら
モジュールの結合
+
プログラムの実行時
↓
動的リンキング
この2語がそろえば、かなり強い判断材料になります。
「実行前」なら静的リンキング
目的モジュールやライブラリを
実行前に結合する
↓
静的リンキング
入力と出力でリンカとローダを分ける
| 用語 | 主な入力 | 主な出力・結果 |
|---|---|---|
| コンパイラ | ソースコード | 目的モジュール |
| リンカ | 目的モジュール・ライブラリ | ロードモジュール |
| ローダ | ロードモジュール | 主記憶上の実行可能な状態 |
部品をつなぐ
→ Linker
完成したものを主記憶へ入れる
→ Loader
どんな場面で使う?
複数の目的モジュールをまとめる
大きなプログラムでは、複数のソースファイルを個別にコンパイルすることがあります。
目的モジュールA
+
目的モジュールB
+
ライブラリ
↓
リンク
↓
実行できる形にまとめる
共有ライブラリを利用する
実行時に共有ライブラリなどを利用する場合は、動的リンキングの考え方が使われます。
実際に配置された場所に応じたアドレス解決については、再配置とは?ロード時のアドレス補正とリンクとの違いでも整理しています。
よくある誤解・混同
動的リンキングはインタプリタのこと
違います。
ソースコードを順番に解釈・実行
→ インタプリタ
実行時にモジュールを結合
→ 動的リンキング
「実行時」という言葉だけで判断せず、何をしているかを見ます。
動的リンキングはオーバレイのこと
違います。
オーバレイは、主記憶に入りきらない大きなプログラムを複数の部分に分け、必要な部分だけを主記憶へ読み込んで実行する方式です。
いつモジュールを結合するか
→ リンキング
どの部分を主記憶へ載せるか
→ オーバレイ
静的リンキングと動的リンキングは、どちらも実行時に行う
違います。
実行前
→ 静的リンキング
実行時
→ 動的リンキング
この時間軸が最重要です。
リンカとローダは同じ
違います。
目的モジュールやライブラリを結合する
→ リンカ
ロードモジュールを主記憶へ読み込む
→ ローダ
リンキングと再配置は同じ
違います。
複数の部品を一つにつなぐ
→ リンク
主記憶上の配置位置に合わせてアドレスを直す
→ 再配置
まとめ(試験直前用)
- リンカは、目的モジュールやライブラリを結合する
- 実行前に結合するのが静的リンキング
- 実行時に結合するのが動的リンキング
- インタプリタは、ソースコードを順番に解釈・実行する
- オーバレイは、必要な部分だけを主記憶へ読み込む
- ローダは、ロードモジュールを主記憶へ読み込む
- 再配置は、主記憶上の配置位置に合わせてアドレスを補正する
試験では、まずこの2行を思い出します。
実行前に結合
→ 静的リンキング
実行時に結合
→ 動的リンキング
「結合」と「いつ行うか」を見る。これがリンキング問題の最短ルート。