共有ライブラリについて
ライブラリとは
ライブラリとは、プログラムでよく使われる機能をまとめ、再利用可能な形にしたものです。
ライブラリが単独で実行される事はなく、プログラムの作成時に実行ファイルに組み込まれる
ライブラリを静的ライブラリと呼びます。
プログラムからライブラリを利用することをリンクと言い、プログラムを実行可能状態に
変換(コンパイル)する際にライブラリを実行ファイル内に埋め込むことを
スタティックリンク(静的リンク)といいます。
また、プログラム実行時にライブラリを呼び出すことをダイナミックリンク(動的リンク)といい、
複数のプログラムで共有されるライブラリを共有ライブラリと呼びます。
共有ライブラリを配置しているディレクトリをライブラリパスと呼び、
通常、/libや/usr/libに配置され、ファイル名はlibXXX.soXXになります。
共有ライブラリを確認する
ある実行ファイル(コマンド)が必要としている共有ライブラリは’ldd’コマンドで
調べることができます。
[コマンド]-vオプションで全ての情報が表示されます。
# ldd -v /bin/cat
[実行結果]
linux-vdso.so.1 => (0x00007fff3b8a7000)
libc.so.6 => /lib64/libc.so.6 (0x00000032b2600000)
/lib64/ld-linux-x86-64.so.2 (0x00000032b2200000)
Version information:
/bin/cat:
libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
あるプログラムの実行時には共有ライブラリを検索し、ロードするプログラム(ld.soリンカ、ローダ)が
必要なライブラリをロードします。
ライブラリを配置するライブラリパスは、/libや/usr/lib以外にも追加することが可能で
実行時に以下の順で共有ライブラリの場所を検索します。
1.環境変数LD_LIBRARY_PATH
共有ライブラリの検索パスを指定するための環境変数に共有ライブラリパスを指定します。
[コマンド]/home/user/mylibをユーザの共有ライブラリパスとして指定
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/mylib
$ echo $LD_LIBRARY_PATH
[実行結果]
:/home/user/mylib
2./etc/ld.so.cacheファイル
ld.soリンカが共有ライブラリを検索するためのバイナリファイルです。
ユーザは/etc/ld.so.confファイルにライブラリパスを追記し、
‘ldconfig’コマンドを実行し、/etc/ld.so.cacheファイルを再構築します。
ライブラリパスの実体は/etc/ld.so.conf.d/*.confにあることもあります。
[コマンド]
# cat /etc/ld.so.conf
[実行結果]/etc/ld.so.conf.d/以下のファイルを読み込む
include ld.so.conf.d/*.conf
[コマンド]
# cat /etc/ld.so.conf.d/llvm-x86_64.conf
[実行結果]
/usr/lib64/llvm
3./libと/usr/libディレクトリ
一般的に使用される共有ライブラリは、これらのディレクトリに格納されています。