FE EXAM

静的ライブラリ(スタティックリンク)

ビルド時に実行ファイルへ組み込まれる形式のライブラリ。

INTERACTIVE VISUALIZATION
ソース
静的ライブラリ
リンカ
実行ファイル
フェーズ
idle
ライブラリ組み込み
まだ
実行ファイルの大きさ
本体のみ
シナリオ
ステップ1 / 6
STEP 1/6ビルドを始める前まだ何もしていない状態です。手元には自分が書いたソースコード(=プログラムの設計図にあたる文章)と、よく使う機能をまとめた静的ライブラリ(拡張子.lib や .a のファイル)があります。これからこの2つを「ビルド」して、実行できるファイルを作ります。
ソースコードmain.c静的ライブラリlibmath.a / .libリンカ結合担当実行ファイルapp.exe自分のコード実行環境OS / メモリ実行← ビルド(リンク)時 →実行時
静的ライブラリの特徴
・組み込みのタイミング = ビルド(リンク)時
・実行ファイルの中身 = 自分のコード + ライブラリのコード(自己完結)
・実行時 = 外部のライブラリファイル不要
解説

📌
静的ライブラリとは

ソース+ ライブラリリンク実行ファイルライブラリ込み単体で動く

静的ライブラリとは、ビルド(リンク)時に実行ファイル本体へ組み込まれるライブラリのことです(拡張子は .lib や .a)。ライブラリ=よく使う機能をまとめた部品集のことで、それを自分のプログラムに取り込んで使います。

身近な例で考えると、料理本のレシピを自分のノートに丸ごと書き写しておくのに似ています。一度書き写してしまえば、料理本(ライブラリファイル)が手元になくても、自分のノート(実行ファイル)だけで料理を作れます。

上のツールで▶ボタンを押すと、ソースと静的ライブラリをリンカが結合し、ライブラリのコードを含んだ1つの実行ファイルができあがる流れを確認できます。

🔗
リンク時に組み込まれる仕組み

ライブラリ必要部分だけコピー自分のコード取り込み済1つに統合

ビルドの流れの中で、組み込みを担当するのがリンカ(=部品を1つにまとめる結合担当)です。リンカは静的ライブラリから、プログラムが実際に使う部分のコードだけを取り出し、実行ファイルの中へコピーして1つにまとめます。

ビルドは大きく次の流れで進みます。
① コンパイル:コンパイラがソースを機械語に翻訳する(ライブラリ呼び出しは予約だけ残る)
② リンク:リンカがライブラリの必要部分を実行ファイルにコピー(組み込み)
③ 完成:ライブラリのコードを含んだ完結した1つの実行ファイルになる

ポイントは、組み込みが起きるのがビルド(リンク)時だという点です。一度組み込んでしまえば、実行ファイルの中にライブラリのコードが入っているので、実行のときに外部のライブラリファイルを探しに行く必要がありません。

⚖️
利点と欠点

静的ライブラリには、はっきりした利点欠点があります。すべてを自分の中に取り込むという性質が、そのまま良い面と悪い面の両方を生みます。

利点
・単体で動く(配布が楽)
・実行時に外部ライブラリ不要
・依存トラブルが起きにくい
欠点
・実行ファイルが大きくなる
・更新時は再ビルドが必要
・複数プログラムでメモリ・ディスクを重複消費

これらの欠点を解消するのが、実行時にライブラリを読み込む動的ライブラリ(DLL)です。動的ライブラリは実行ファイルが小さく、更新が楽で、複数のプログラムが同じライブラリをメモリ上で共有できます。

項目静的ライブラリ動的ライブラリ
組み込み時期ビルド(リンク)時実行時
実行ファイル大きい(自己完結)小さい(本体のみ)
更新再ビルドが必要差し替えで完了
練習問題

🎯
基本情報技術者 練習問題

Q1.静的ライブラリの説明として最も適切なものはどれか。
A.実行時にメモリへ読み込まれ、複数プログラムで共有されるライブラリ
B.ビルド(リンク)時に実行ファイル本体へ組み込まれるライブラリ
C.ソースコードのまま配布されるライブラリ
D.ネットワーク経由で実行時に取得されるライブラリ
Q2.静的ライブラリにおいて、ライブラリのコードを実行ファイルへ組み込む処理を担当するものはどれか。
A.コンパイラ
B.ローダ
C.リンカ
D.OSのスケジューラ
Q3.静的ライブラリの利点・欠点として正しい組み合わせはどれか。
A.利点=実行ファイルが小さい / 欠点=実行時に外部依存がある
B.利点=単体で動き配布が楽 / 欠点=実行ファイルが大きく更新時は再ビルドが必要
C.利点=複数プロセスでメモリを共有できる / 欠点=ビルドが遅い
D.利点も欠点も動的ライブラリと完全に同じ

関連コンテンツ