
新Linux入門|共有ライブラリと静的ライブラリの基本
プログラム開発で欠かせない「ライブラリ」について、やさしく解説していきます💡
Linuxでは、ライブラリは大きく分けて「共有ライブラリ(.so)」と「静的ライブラリ(.a)」の2種類があります。
これらはプログラムに便利な機能を追加したり、同じコードを何度も書かなくて済むようにしたりする、とっても重要な仕組みなんです😄

🧩 ライブラリとは?
ライブラリは「再利用できるプログラムの部品セット」です🔧
たとえば「数学計算」「ファイル操作」「ネットワーク通信」など、よく使う機能をまとめておくことで、開発者は必要なときに呼び出すだけでOK!
| 種類 | 拡張子 | 特徴 |
|---|---|---|
| 静的ライブラリ | *.a | コンパイル時にプログラムへ組み込み(独立型) |
| 共有ライブラリ | *.so | 実行時に動的にリンク(共有型) |
💡 静的ライブラリは「自分専用」、
💡 共有ライブラリは「みんなで使う」と覚えるとわかりやすいです!
🌐 各OSのライブラリ拡張子一覧
| OS | 静的リンク | 動的リンク | 動的ロード |
|---|---|---|---|
| Linux | *.a | *.so | *.so |
| macOS | *.a | *.dylib | *.bundle or *.so |
| Windows | *.lib | *.dll | *.dll |
AlmaLinuxでは「.so」と「.a」が中心になります📦
⚙️ 共有ライブラリ(.so)の特徴
共有ライブラリは実行時にリンクされるライブラリです✨
| 特徴 | 説明 |
|---|---|
| 🔄 動的リンク | プログラム実行時に必要なライブラリを読み込む。 |
| 🤝 共有リソース | 複数のアプリが同じライブラリを共有できる。 |
| 🔧 動的更新 | ライブラリを更新しても再コンパイル不要 |
たとえば、libc.so(C言語標準ライブラリ)は、ほぼすべてのLinuxプログラムが使っています!
📦 静的ライブラリ(.a)の特徴
静的ライブラリは、コンパイル時にアプリケーションへ組み込まれます。
| 特徴 | 説明 |
|---|---|
| 🧱 コンパイル時リンク | コンパイル時に実行ファイルに埋め込まれる。 |
| 🔒 独立性 | 実行時に外部ライブラリを参照しない。 |
| 🚀 高速実行 | 外部依存がないため、起動が速い場合もある。 |
ただし、実行ファイルのサイズが大きくなるのがデメリットです💡
📁 ライブラリの格納パス
| 種類 | 例 | 用途 |
|---|---|---|
| システムライブラリ | /lib, /usr/lib | OS全体で使う標準ライブラリ |
| ユーザーライブラリ | /usr/local/lib, /opt/lib | 独自に追加したライブラリ |
ライブラリを新しく追加したときは、ldconfig コマンドでキャッシュ更新を忘れずに✨
[root@AlmaLinux ~]# ldconfig🔍 実行ファイルが使うライブラリを調べよう
ldd コマンドを使うと、実行ファイルが依存している共有ライブラリを確認できます👇
[root@AlmaLinux ~]# ldd /bin/ls
linux-vdso.so.1 (0x00007fffd46f6000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f4d030fb000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f4d030f1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4d02e00000)
libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f4d03055000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4d03158000)これを見ると、「ls」コマンドはlibcやlibpthreadなどのライブラリを利用していることがわかりますね🧐
🧪 コンパイル時の例(gcc)
共有ライブラリを使うときと、静的ライブラリを使うときの違いを見てみましょう。
| 種類 | コマンド例 | 説明 |
|---|---|---|
| 共有ライブラリ使用 | gcc -o my_program my_program.c -lm | mathライブラリ(libm.so)をリンク |
| 静的ライブラリ使用 | gcc -o my_program my_program.c /usr/lib64/libm.a | mathライブラリを静的リンク |
🌟 まとめ
Linuxのプログラム開発において、ライブラリは“縁の下の力持ち”のような存在です💪
共有ライブラリ(.so)は軽量で共有性が高く、システム全体で効率よく使えます。
一方、静的ライブラリ(.a)はアプリケーション単体で完結できる安定性が魅力です。
どちらを選ぶかは目的次第。
- 実行速度や独立性を重視 → 静的リンク
- 保守性や共有効率を重視 → 共有ライブラリ
ライブラリの仕組みを理解しておくと、Linux開発がぐっと面白くなりますよ😄✨
