---
title: "リンカ（Linker）とは？コンパイラ・ローダ・デバッガとの違い【基本情報技術者試験】"
description: "リンカ（Linker）を、複数の目的モジュールやライブラリを結合してロードモジュールを生成するソフトウェアとして整理し、コンパイラ、ローダ、デバッガとの違いをFE試験向けに解説します。"
last_modified_at: "2026-07-15"
canonical_url: "https://stemtazoo.github.io/fe/linker/"
section: "fe"
---

## まず結論

リンカ（Linker）とは、**複数の目的モジュールやライブラリをつないで、実行できる形のロードモジュールを作るソフトウェア**です。

英語の `link` は「つなぐ」という意味です。

```text
Compiler：ソースコードを目的モジュールに変換する
Linker  ：目的モジュールやライブラリをつなぐ
Loader  ：ロードモジュールを主記憶に読み込む
Debugger：実行を確認して不具合を調べる
```

「相互参照の解決」や「複数の目的モジュールからロードモジュールを生成」と出たら、**リンカ**を疑います。

## 直感的な説明

プログラムは、いくつかの部品に分けて作られることがあります。

```text
部品A
部品B
ライブラリ
```

リンカは、これらの部品をつないで、実行できる形にまとめる役割です。

```text
ソースコード
→ Compiler
→ 目的モジュール
→ Linker
→ ロードモジュール
→ Loader
→ 主記憶に読み込んで実行
```

コンパイラが部品を作り、リンカが部品を組み合わせ、ローダが完成品を主記憶へ運ぶイメージです。

## 定義・仕組み

| 段階 | 担当するもの | 役割 |
|---|---|---|
| 1 | コンパイラ | ソースコードを目的モジュールに変換する |
| 2 | リンカ | 目的モジュールやライブラリを結合する |
| 3 | ローダ | ロードモジュールを主記憶に読み込む |
| 4 | デバッガ | 実行を確認し、不具合を調べる |

リンカが行う重要な処理の一つが、**相互参照の解決**です。

```text
目的モジュールA
→ 目的モジュールBの関数を参照
```

この参照先を対応付け、複数の目的モジュールやライブラリをまとめて、実行できるロードモジュールを生成します。

```text
目的モジュール + ライブラリ
→ Linker
→ ロードモジュール
```

公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、説明文から該当するソフトウェアを選ぶ形で出題されやすいです。

| 問題文のキーワード | 選ぶ用語 |
|---|---|
| ソースコードを変換する | コンパイラ |
| 目的モジュールを結合する | リンカ |
| 相互参照を解決する | リンカ |
| ロードモジュールを主記憶に読み込む | ローダ |
| ステップ実行、実行結果を確認する | デバッガ |

```text
相互参照の解決などを行い、
複数の目的モジュールから一つのロードモジュールを生成する
→ リンカ
```

一方、

```text
実行に先立ってロードモジュールを主記憶にロードする
→ ローダ
```

です。

### 入力と出力で見分ける

| 用語 | 主な入力 | 主な出力・結果 |
|---|---|---|
| コンパイラ | ソースコード | 目的モジュール |
| リンカ | 目的モジュール・ライブラリ | ロードモジュール |
| ローダ | ロードモジュール | 主記憶上の実行可能な状態 |
| デバッガ | 実行プログラム | 実行状況や不具合の手掛かり |

試験では、「何を受け取り、何を作るか」を見ると判断しやすくなります。

## どんな場面で使う？

リンカは、複数のソースファイルを個別にコンパイルしたプログラムや、外部ライブラリを利用するプログラムを、一つの実行可能な形へまとめるときに使われます。

```text
複数の目的モジュール
+
必要なライブラリ
↓
リンカが参照関係を解決
↓
ロードモジュールを生成
```

プログラムの作成から実行までの順序は、次のように整理します。

```text
変換 → 結合 → 読込み → 実行確認
Compiler → Linker → Loader → Debugger
```

## よくある誤解・混同

| 混同しやすい組み合わせ | 違い |
|---|---|
| リンカとローダ | Linkerは結合する、Loaderは主記憶に読み込む |
| コンパイラとリンカ | Compilerは変換する、Linkerはつなぐ |
| リンカとデバッガ | Linkerは実行前に結合する、Debuggerは実行を確認する |

```text
compile：変換してまとめる
link   ：つなぐ
load   ：読み込む
debug  ：バグを調べる
```

特に、ローダはロードモジュールを作るのではなく、主記憶に読み込みます。

```text
ロードモジュールを作る
→ Linker

ロードモジュールを読み込む
→ Loader
```

## まとめ（試験直前用）

- リンカは、目的モジュールやライブラリをつなぐソフトウェア
- Compilerは、ソースコードを目的モジュールに変換する
- Linkerは、相互参照を解決し、ロードモジュールを生成する
- Loaderは、ロードモジュールを主記憶に読み込む
- Debuggerは、プログラムの実行を確認して不具合を調べる
