Skip to the content.

最終更新日:2026年9月3日

まず結論

リンカ(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行を思い出します。

実行前に結合
→ 静的リンキング

実行時に結合
→ 動的リンキング

「結合」と「いつ行うか」を見る。これがリンキング問題の最短ルート。

© 2024-2026 stemtazoo. All rights reserved.