新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/libOS全体で使う標準ライブラリ
ユーザーライブラリ/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 -lmmathライブラリ(libm.so)をリンク
静的ライブラリ使用gcc -o my_program my_program.c /usr/lib64/libm.amathライブラリを静的リンク

🌟 まとめ

Linuxのプログラム開発において、ライブラリは“縁の下の力持ち”のような存在です💪
共有ライブラリ(.so)は軽量で共有性が高く、システム全体で効率よく使えます。
一方、静的ライブラリ(.a)はアプリケーション単体で完結できる安定性が魅力です。

どちらを選ぶかは目的次第。

  • 実行速度や独立性を重視 → 静的リンク
  • 保守性や共有効率を重視 → 共有ライブラリ

ライブラリの仕組みを理解しておくと、Linux開発がぐっと面白くなりますよ😄✨