ディレクトリの概要
/libはシステムが動作するために必要な共有ライブラリを保存するディレクトリ。Linuxでは多くのコマンドが「小さい実行ファイル+共有ライブラリ」で構成されている。
主に/binや/sbinのプログラムが実行時に読み込む基本ライブラリが置かれている。
- システムコマンドが利用する共有ライブラリの保存
- 動的リンクに必要なライブラリの提供
- OS起動時に必要な基本ライブラリの格納
中身を見ていく
la -1(一部抜粋)
ld-linux-x86-64.so.2
libc.so.6
libm.so.6
libpthread.so.0
libdl.so.2
modules
ld-linux.so
プログラム実行時に必要なライブラリを読み込む動的リンカー(linker)
libc.so
Linuxの多くのプログラムが使用する基本ライブラリ
ファイル操作やメモリ管理などを提供する
libm.so
数学関数(sin, cos, sqrtなど)を提供するライブラリ
libpthread.so
マルチスレッド処理を行うためのライブラリ
modules/
カーネルモジュールが入るディレクトリ
リンクとは
プログラムは複数の部品から作られている。それらの部品を1つの実行ファイルにまとめる作業をリンク(link)と呼ぶ。
静的リンク(static link)
必要なライブラリを全部プログラムに埋め込む方式。
イメージ:
[プログラム] ├ ライブラリ ├ ライブラリ └ ライブラリ
| 特徴 | 内容 |
|---|---|
| ファイルサイズ | 大きい |
| 実行 | 単体で動く |
| 更新 | 再コンパイル必要 |
静的リンクの場合、lddをするとnot a dynamic executable(これは動的リンクされた実行ファイルではありません)とでる。
%ldd /usr/bin/busybox
not a dynamic executable
※lddは指定したプログラムが使う共有ライブラリを表示するコマンド
動的リンク(dynamic link)
必要なライブラリを実行時に読み込む方式。
プログラム+外部ライブラリで動く
Linuxでは多くのプログラムが動的リンクで動作する。
メリット
- メモリ使用量を削減
- 同じライブラリを複数プログラムで共有
- 更新が容易
| 特徴 | 内容 |
|---|---|
| ファイルサイズ | 小さい |
| 実行 | ライブラリが必要 |
| 更新 | ライブラリ更新だけでOK |
動的リンカー(dynamic linker)
プログラムを実行するときに必要な共有ライブラリを読み込んで結びつけるプログラム。プログラム実行時にライブラリ依存関係を解決する。(動的リンカーで必要なライブラリを探すイメージ)
Linuxでは代表的にld-linux-x86-64.so.2がこれに当たる。