共有ライブラリの確認(ldd)と設定(ldconfig)

「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 で調べています。

共有ライブラリの設定

検索順序

共有ライブラリは以下順序で検索されます。

  1. 環境変数 LD_LIBRARY_PATH で指定されたディレクトリパス配下
  2. /etc/ld.so.cache ファイルで指定されたディレクトリパス配下
  3. /lib/usr/lib ディレクトリ配下

個人の環境のみでパスを通したいときは LD_LIBRARY_PATH にパスを追加し、
システム全体でパスを通したいときは /etc/ld.so.cache ファイルにパスを追加します。

「/etc/ld.so.cache」ファイルの更新

以下手順で更新します。

  1. /etc/ld.so.conf ファイルにディレクトリパスを追加。
  2. 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