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を設定する。