LPICの勉強(共有ライブラリ)

Linuxのライブラリの種類

種類 概要 備考
静的ライブラリ スタティックリンクにより呼び出される
共有ライブラリ ダイナミックリンクにより呼び出される 一般的/libや/usr/libにあり、lib~.so~という名前


#共有ライブラリのファイルをいくつか見てみる。
> find /usr/lib -type f -name lib*.so| head -4
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85-2.6.1.2.el7_1.x86_64/jre/lib/amd64/xawt/libmawt.so
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85-2.6.1.2.el7_1.x86_64/jre/lib/amd64/libjsoundalsa.so
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85-2.6.1.2.el7_1.x86_64/jre/lib/amd64/libpulse-java.so
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85-2.6.1.2.el7_1.x86_64/jre/lib/amd64/libsplashscreen.so
#実行ファイルが必要な共有ライブラリをlddコマンドで調べる
>ldd /bin/rm
    linux-vdso.so.1 =>  (0x00007ffd9d976000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f930a233000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f930a607000)

ライブラリの呼び出され方

プログラムの実行時にはld.soリンカおよびローダがライブラリを検索してロードする。規定のディレクトリ以外のライブラリも検索したければ、/etc/ld.so.confに記述を追加する

#/etc/ld.so.confの中身を見る
> cat /etc/ld.so.conf
include ld.so.conf.d/*.conf

#ld.so.conf.dディレクトリ以下のconfファイルをすべて読んでいる
#ld.so.conf.dディレクトリを確認する
> ls /etc/ld.so.conf.d
dyninst-x86_64.conf                     libiscsi-x86_64.conf
kernel-3.10.0-229.11.1.el7.x86_64.conf  mariadb-x86_64.conf
kernel-3.10.0-229.el7.x86_64.conf       tracker-x86_64.conf

ただし、実際は都度検索とロードをしているわけではなく、キャッシュファイル(/etc/ld.so.cache)を参照している。 そのため、共有ライブラリを変更した場合はldconfigコマンドでキャッシュを更新する必要がある。

また、他のディレクトリを検索させたい時は、環境変数LD_LIBRARY_PATHを設定する。