07. shared library: なぜlibcが必要なのか

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が起動時に依存解決している
  • ライブラリエラーは調査可能な構造的問題

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です