IT用語
(
ひよぺん
)
Home
コラム
用語集
About
検索
Ctrl K
Esc
見つかりませんでした
調べたいIT用語を入力してね
リンカ
りんか
プログラミング
用語集
› 💻 プログラミング › リンカ
【りんか】
リンカ とは?
最終更新:
2026年4月2日
💡 コンパイル済みのパーツを「繋ぎ合わせて」実行ファイルにする
📌 このページのポイント
複数のオブジェクトファイル(.o/.obj)を1つの実行ファイルに結合
静的リンク(
ライブラリ
を埋め込む)と動的リンク(実行時に参照)
未解決シンボルの解決(関数の呼び出し先アドレスを確定)
コンパイラ
→アセンブラ→リンカの最終工程
コンパイルからリンクまでのフロー
main.c
util.c
ソースファイル
コンパイラ
機械語に変換
main.o
util.o
オブジェクト
リンカ
結合・アドレス解決
ライブラリも統合
実行
ファイル
静的リンク
ライブラリをファイルに
埋め込む
動的リンク
実行時にライブラリを
読み込む(.dll/.so)
シンボル解決
関数名と実際の
アドレスを紐付け
リンカのイメージ
ひよこ
コンパイラ
だけじゃダメなの?
ペンギン先生
コンパイラ
は1つのソースファイルを1つのオブジェクトファイルに変換する。でも
プログラム
は複数のソースファイルと
ライブラリ
で構成されている。リンカがこれらを全部集めて、関数呼び出しのアドレスを解決し、1つの実行可能ファイルにまとめるんだ。main.oがutils.oのadd()を呼ぶなら、リンカがアドレスを確定するよ
ひよこ
静的リンクと動的リンクの違いは?
ペンギン先生
静的リンクは
ライブラリ
のコードを実行ファイルに埋め込む。ファイルサイズは大きくなるけど単体で動く。動的リンクは.dll(
Windows
)や.so(
Linux
)を実行時に読み込む。ファイルが小さくなりメモリも共有できるけど、
ライブラリ
がない環境では動かない。Goは静的リンクが
デフォルト
で配布が楽なんだよ
ひよこ
リンクエラーって何?
ペンギン先生
よくあるのは「undefined reference(未定義参照)」。関数を呼んでいるのに、その関数の実体がどのオブジェクトファイルにもない状態。原因は①
ライブラリ
のリンク忘れ(-lmathなど)、②関数名のスペルミス、③
C++
の名前マングリングによるシンボル不一致。
コンパイル
は通るのにリンクで失敗するパターンだよ
ひよこ
最近のリンカ事情は?
ペンギン先生
リンクは大規模プロジェクトのビルド時間の
ボトルネック
になることがある。
Google
のMold(Rui Ueyama作)は従来のリンカの数倍〜数十倍高速。LLD(LLVM Linker)もGNU ldより大幅に速い。Chromiumや
Linux
カーネル
のようにオブジェクトファイルが数万個あるプロジェクトでは、リンカの速度が開発効率に直結するよ
まとめ:ざっくりこれだけ覚えればOK!
「リンカ」って出てきたら「
コンパイル
結果を繋げて実行ファイルを作る
プログラム
」と思えればだいたいOK!
📖 おまけ:英語の意味
「Linker」
= 結合プログラム
💬 Link(繋ぐ)するプログラム。バラバラのパーツを1つに繋ぐ最終工程だよ
🔗 あわせて読みたい
コンパイラ とは?
ガベージコレクション とは?
Java とは?
シェアする
X
URLコピー
← 用語集にもどる