Linuxにおけるライブラリについて

ライブラリとは?

複数のアプリからよく使用される機能を関数として実装し、複数の関数を種類ごとにファイルにまとめたもの
これによりコードの記載が楽になるし、処理に変更があった際のメンテナンスも楽になる。

ライブラリの種類(静的ライブラリと共有ライブラリ)

静的ライブラリ→プログラムの作成(コンパイル)時に実行ファイルにリンクされる。メリットとして、①依存関係を気にする必要がないため、ライブラリのバージョンが変わっても気にする必要がない。②直接組み込まれているため、動作が早く、デバッグもしやすい。③直接組み込まれているため、ライブラリの置き換えや改ざんが困難になるため、セキュリティ面で優れている
共有ライブラリ→プログラムの実行時にメモリに取り込まれ(動的リンク)、複数のプログラム間で共有される。各プロセスは独自の仮想メモリ空間を持ち、共有ライブラリは物理メモリ上に一つだけ存在しているが、各プロセスの仮想メモリ間に共有ライブラリがロードされる。「lib~.so~」の形式で名前が付けられている。メリットとして、①ディスクスペースの節約、更新の容易さ、配布とインストールの容易さ②同じ共有ライブラリを使用するプログラムが複数あった場合、ライブラリは一度だけメモリにロードされるので、メモリ使用が効率化される。③プログラムの実行時にロードされるため、異なるバージョンや特定の機能を持つライブラリを実行時に選択できる。そのため実行時の柔軟性が上がる

これらの観点から、静的ライブラリは、特定の環境やセキュリティが重視される場合、又は配布の簡便さが求められる環境で向いている。ただ、実行ファイルのサイズが大きくなる点を考慮する必要がある。共有ライブラリは、大規模なアプリケーション環境や、多くのプログラムが同じライブラリを使用する環境で向いている。ただ、ライブラリがシステム上に存在することを確認する必要があり、バージョンの互換性に注意する必要がある。

ライブラリ関連のファイル

/lib,/usr/lib→通常、共有ライブラリが配置されているディレクト
/etc/ld.so.conf→プログラム実行時に、共有ライブラリを検索する際に、/lib,/usr/lib以外のディレクトリも検索したい場合にこのファイルに記述する。/etc/ld.so.conf.d以下に複数の設定ファイルを配置して、/etc/ld.so.confでそれらを読み込んでいる場合もある。
/etc/ld.so.cache→プログラム実行時にld.soリンカ及びローダが実際に参照するバイナリのキャッシュファイル。ldconfigコマンドを使用して、/etc/ld.so.confファイルに基づいて/etc/ld.so.cacheを再構築する。よって、共有ライブラリを変更した際はldconfigコマンドを実行してキャッシュを更新する必要がある。
環境変数LD_LIBRARY_PATH→その他のディレクトリも検索対象に加えたい場合にディレクトリリストを記述する。

ライブラリ関連のコマンド

ldd→実行ファイルが必要とする共有ライブラリを調べる。
ldconfig→/etc/ld.so.confファイルに基づいて/etc/ld.so.cacheを再構築する。

参考文献

LPICレベル1教科書
LPICレベル1スピードマスター問題集