SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC101】Linuxにおける共有ライブラリ LPICで学ぶLinux⑥

共有ライブラリ

共有ライブラリについて

共有ライブラリとは、部品化されたプログラムの集合であるライブラリの一種で、複数のプログラムから共有・共用されるもの。OSやミドルウェア、プログラミング言語の実行環境(ランタイム)などの一部として提供されることが多い。

引用元:共有ライブラリ(シェアードライブラリ)とは - IT用語辞典 e-Words

共有ライブラリはLinuxOSだけではなく、WindowsOSなどにも使用されている「.dll」などのファイルですね。
その機能としては名前の通り、本体のみで機能するものではなく他のアプリケーションなどから利用されることによるプログラムの部品のようなものです。

ライブラリ自体は動的と静的なものに大別されますが、これから見ていきます。

スタティックリンク

スタティックリンクはプログラムをコンパイルする段階で、コンパイラがライブラリを実行ファイル内に埋め込みます。

特徴としては以下の点が挙げられます。

・メリット
1つのプログラムだけで動作させられ、別環境で動作可能。

・デメリット
他のプログラムとライブラリが重複する可能性があるので、プログラムのサイズが大きくなる。

ダイナミックリンク

ダイナミックリンクはプログラムの実行時にライブラリの機能を呼び出す。
特にダイナミックリンクにより呼び出されるライブラリを共有ライブラリという。

特徴としては以下の点が挙げられます。

・メリット
ライブラリが共通で使用されるため、プログラム全体のサイズが小さくなる。

・デメリット
プログラム実行時に適切に配置されたライブラリが必要になる。

共有ライブラリの格納場所

共有ライブラリは以下の場所に格納されています。

・/lib
・/lib64

/lib64は64bit版のライブラリを格納する場所となります。

私の環境で確認したところ以下のような状況となっていました。

lrwxrwxrwx.   1 root root    7  7月  3 08:53 lib -> usr/lib
lrwxrwxrwx.   1 root root    9  7月  3 08:53 lib64 -> usr/lib64

/libは/usr/libのシンボリックリンクになっており、実態は/usr/libに存在します。
試験的にはルートディレクトリの配下と/usrディレクトリの配下に存在しているということを抑えておけば大丈夫でしょう。

共有ライブラリのコマンド

必要なライブラリの確認

あるプログラム(コマンド)に対して必要な共有ライブラリを調べるには「ldd」コマンドを用います。

ldd /bin/cat

・実行例

[root@localhost lib]# ldd /bin/tmux
        linux-vdso.so.1 =>  (0x00007ffc1937a000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007f9ea0b5a000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f9ea0933000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f9ea0709000)
        libevent-2.0.so.5 => /lib64/libevent-2.0.so.5 (0x00007f9ea04c1000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f9ea02a7000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f9e9fed9000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f9e9fcd5000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9e9fab9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f9ea0d5d000)
共有ライブラリの検索パス更新

共有ライブラリの検索パスを更新するには「ldconfig」コマンドを使用します。

ldconfig

このコマンドでは共有ライブラリの検索パスが記述されている「/etc/ld.so.conf」ファイルを参照し「/etc/ld.so.cache」ファイルを更新します。

/etc/ld.so.cacheはバイナリファイルであり、ライブラリの検索に使用されるものです。

また、「LD_LIBRARY_PATH」は共有ライブラリのパスが保存された環境変数であり、環境変数が設定されている場合には検索の読み込み時にはこちらの優先度が高くなります。

実践では使ったことがありませんが、試験的には以下の流れは抑えておくべきだと思います。

f:id:wantanBlog:20200707003258p:plain


参考:Linux - 共有ライブラリの管理

・前回(第五回)
www.wantanblog.com