「lddコマンド」「ldconfigコマンド」を利用した、共有ライブラリの確認と設定方法について紹介します。
目次
共有ライブラリの確認
プログラムで必要とする共有ライブラリを表示するには lddコマンド
を利用します。
下記利用例です。
$ ldd /bin/find
linux-vdso.so.1 => (0x00007ffcfa5a1000)
librt.so.1 => /lib64/librt.so.1 (0x00007ff4eaa2a000)
libm.so.6 => /lib64/libm.so.6 (0x00007ff4ea728000)
libselinux.so.1 => /usr/lib64/libselinux.so.1 (0x00007ff4ea507000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff4ea143000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff4e9f27000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff4eac32000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ff4e9d23000)
$
$ ldconfig -p | grep libpthread.so.0
libpthread.so.0 (libc6,x86-64, OS ABI: Linux 2.6.35) => /lib64/libpthread.so.0
まず、findコマンドで必要な共有ライブラリを調べてます。
利用している共有ライブラリの1つである libpthread.so.0
が現在の共有ライブラリキャッシュに保存されているか ldconfig -p
で調べています。
共有ライブラリの設定
検索順序
共有ライブラリは以下順序で検索されます。
- 環境変数
LD_LIBRARY_PATH
で指定されたディレクトリパス配下 /etc/ld.so.cache
ファイルで指定されたディレクトリパス配下/lib
と/usr/lib
ディレクトリ配下
個人の環境のみでパスを通したいときは LD_LIBRARY_PATH
にパスを追加し、
システム全体でパスを通したいときは /etc/ld.so.cache
ファイルにパスを追加します。
「/etc/ld.so.cache」ファイルの更新
以下手順で更新します。
/etc/ld.so.conf
ファイルにディレクトリパスを追加。ldconfigコマンド
を実行 ⇒/etc/ld.so.conf
を参照し、/etc/ld.so.cache
を作成します。
共有ライブラリがインストールされてない場合
以下のようのに not found
と表示されている状態ではプログラムを実行することができません。
$ ldd chrome | grep "not found"
libXcursor.so.1 => not found
libXss.so.1 => not found
libatk-1.0.so.0 => not found
libatk-bridge-2.0.so.0 => not found
libatspi.so.0 => not found
libgtk-3.so.0 => not found
libgdk-3.so.0 => not found
libgdk_pixbuf-2.0.so.0 => not found
この場合、共有ライブラリをインストールする必要があります。
yum
を例にインストール作業を進めます。まず、インストールするパッケージを検索します。yum provides
を利用するとファイル名から、そのファイルを提供しているパッケージを検索できます。
$ yum provides */libXcursor.so.1
Loaded plugins: priorities, update-motd, upgrade-helper
libXcursor-1.1.14-2.1.9.amzn1.i686 : Cursor management library
Repo : amzn-main
Matched from:
Filename : /usr/lib/libXcursor.so.1
libXcursor-1.1.14-2.1.9.amzn1.x86_64 : Cursor management library
Repo : amzn-main
Matched from:
Filename : /usr/lib64/libXcursor.so.1
検索でヒットした libXcursor
というパッケージをインストールします。
yum install libXcursor