Linux – 共有ライブラリの管理

投稿者: | 2019年8月19日

プログラムの世界で、よく使われる部品をまとめたものをライブラリといいます。ライブラリは他のプログラムから容易に使えるようになっています。

ライブラリの機能をプログラムから利用することをリンクといい、予め(コンパイル時)プログラムにライブラリを埋め込んでいるものを静的リンクスタティックリンク)、プログラム実行時に必要なライブラリを利用するものを動的リンクダイナミックリンク)と呼びます。

ダイナミックリンクによって呼び出されるライブラリを、共有ライブラリといいます。

 

Linuxでは、共有ライブラリは「lib~.so~」という名前が付けられています。

 

実行ファイルが必要としている共有ライブラリは、ldd コマンドで参照することができます。以下は、ltコマンドの参照ライブラリを表示した例です。

 

プログラム実行時には、ld.soというリンカが、ライブラリを検索しに行きます。

共有ライブラリのデフォルトは /lib または /usr/lib ディレクトリですが、他のディレクトリも検索対象に含めたい場合は、/etc/ld.so.conf や 環境変数LD_LIBRARY_PATH にディレクトリリストを記載します。

因みに /etc/ld.so.conf に対しては、実際は /etc/ld.so.cache というキャッシュファイルを検索しています。従って共有ライブラリのパスを変更する場合は、このキャッシュファイルを更新しなければなりません。

/etc/ld.so.cache を更新する際には、ldconfig コマンドを実行します。

 

ld.soリンカによる検索は

  1. 環境変数LD_LIBRARY_PATH
  2. キャッシュファイル/etc/ld.so.cache
  3. 共有ライブラリのデフォルト /lib または /usr/lib

の順序で行われます。