共有ライブラリ

 共有ライブラリとは、よく使われる機能を他のプログラムから参照できるようにまとめたプログラムの部品です。プログラム開発者が一からすべての機能を作成する手間を省き、効率的にプログラムを開発するために利用されます。例えば、テキストエディタ(nano, vi, cat, less)でファイルを開く機能は、一般的にライブラリを利用して実装されています。

静的リンクと動的リンク

  • 静的リンク(スタティックリンク)
     プログラム開発時にライブラリをプログラム内部に組み込む方法です。これにより、ライブラリのコードがプログラムと一緒に配布されます。
  • 動的リンク(ダイナミックリンク)
     プログラムの実行時に、必要に応じてライブラリを参照する方法です。これにより、複数のプログラムが同じライブラリを共有し、メモリ使用量を削減できます。

/libディレクトリと/usr/libディレクトリ

 動的リンクによって呼び出されるライブラリを「共有ライブラリ」といい、通常はファイル名に lib〜.so を含みます。これらの共有ライブラリは、以下のディレクトリに配置されます。

  • /lib: 主にシステムの起動や基本的な操作に必要なライブラリが配置されています。
  • /usr/lib: 通常、ユーザー向けのプログラムに関連するライブラリが配置されています。

システムによっては、64ビット用のライブラリを /lib64/usr/lib64 ディレクトリに配置することもあります。

共有ライブラリのメリット

共有ライブラリを利用することで、以下のようなメリットがあります。

  • コードの再利用
     一度作成されたライブラリは、複数のプログラムで共有して利用できます。これにより、プログラムの開発が効率化されます。
  • ディスク容量の節約
     動的リンクにより、同じライブラリが複数のプログラムで共有されるため、ディスク上にライブラリを複数回保存する必要がありません。
  • メモリ使用量の最適化
     複数のプログラムが同じライブラリを動的にリンクする場合、メモリ内でライブラリが一度だけ読み込まれ、共有されます。これにより、システムのメモリ使用量が最適化されます。
  • アップデートが容易
     共有ライブラリが更新された場合、そのライブラリを使用しているすべてのプログラムが自動的に新しいバージョンのライブラリを利用します。これにより、プログラムのセキュリティや機能を容易に改善できます。

動的リンクと実行時のライブラリ検索

 動的リンクを利用する場合、プログラムの実行時にリンクするライブラリが検索されます。ライブラリの検索順序は通常以下のようになります。

  1. 環境変数 LD_LIBRARY_PATH
    この環境変数に指定されたディレクトリが最初に検索されます。
  2. /etc/ld.so.cache ファイルに指定されたディレクトリ
    このファイルに記述されたディレクトリが次に検索されます。
  3. デフォルトのディレクトリ
    /lib, /usr/lib, /lib64, /usr/lib64 などのシステムディレクトリが最後に検索されます。

 プログラムが依存するすべての共有ライブラリを確認するには、ldd コマンドを使用します。このコマンドは、指定したプログラムがどのライブラリに依存しているかを一覧表示します。

共有ライブラリの例

以下は、一般的な共有ライブラリの例です。

  • libc.so: 標準Cライブラリ。多くのCプログラムが依存している基本的なライブラリです。
  • libm.so: 数学関数を提供するライブラリ。高度な数学的計算を行うプログラムで利用されます。
  • libpthread.so: POSIXスレッドライブラリ。マルチスレッドプログラムで使用されます。

まとめ

 共有ライブラリは、Linuxシステムにおけるプログラム開発と管理において重要な役割を果たします。ライブラリを動的にリンクすることで、リソースの効率的な利用やプログラムの管理が容易になります。また、システムのメモリやディスク容量を節約しつつ、コードの再利用性を高めることができます。共有ライブラリの理解と適切な管理は、Linuxエンジニアにとって欠かせない知識です。