07. shared library: なぜlibcが必要なのか
Linuxでプログラムを実行するとき、実行ファイルだけでは完結しないことが多いです。
そこで出てくるのがshared library (共有ライブラリ) です。
shared libraryとは
複数プログラムで共通利用する関数群を、別ファイルとして共有する仕組みです。
- 例: libc.so, libm.so, libpthread.so
- メリット: ファイルサイズ削減、更新容易性
図解テキスト
nginx binary
-> needs libc.so.6
-> needs libpcre.so
-> needs libssl.so
ld-linux (dynamic loader)
-> /lib, /usr/lib, rpath, ld.so.cache を探索
-> 実行時に結合して起動
動的リンクと静的リンク
- 動的リンク: 実行時にshared libraryを読み込む
- 静的リンク: ライブラリを実行ファイルに埋め込む
初学者はまず「動的リンクが標準」と覚えておけば十分です。
手を動かす
which ls
ldd $(which ls)
readelf -d $(which ls) | head -n 30
よくあるエラー
error while loading shared libraries: libxxx.so: cannot open shared object file
この場合、ライブラリ未インストールか検索パス不一致を疑います。
つまり何なのか
shared libraryは、Linuxアプリ実行の土台です。
LFSで自作環境を作ると、この依存がどれだけ重要か実感できます。
今回理解できたこと
- 実行ファイルは多くの場合ライブラリ依存を持つ
- dynamic loaderが起動時に依存解決している
- ライブラリエラーは調査可能な構造的問題
コメントを残す