Redhat系のディストリビューションで /usr/local/lib に入れたライブラリを使うには、
/etc/ld.so.conf に以下のような行を追記して、ldconfig を実行する必要がある、というお話。
# ld.so.confに追記が必要
/usr/local/lib
先日、DVDを見ようとして、libdvdread をインストールしたのだけど、
なぜだか、プログラム実行時に「libdvdread が見つかりません」というメッセージが出る。
/usr/local/lib を見ると、たしかに libdvdread.so が入っている。
どうやらこのパス自体がサーチ対象に入っていないらしい。。
ライブラリを置くディレクトリは通常、以下のようなお約束になっている。
/usr/lib → ディストリビューションが管理するライブラリ
/lib → 起動時に必要なライブラリ
/usr/local/lib → ユーザーが作成したライブラリ
プログラムを実行する際は、ダイナミックリンカー( ld-linux.so.* ) が、
上記のパスをサーチして必要なファイルをダイナミックリンクすることに、
なっている。
ただし、毎回、ディレクトリをサーチしてライブラリをリンクしていると、
処理が遅くなるので、 通常は ライブラリキャッシュ( /etc/ld.so.cache) を参照して
ダイナミックリンクする。このキャッシュを更新するのが ldconfig コマンドなのだ。
liblinux.so.* が参照するディレクトリは /etc/ld.so.conf に記載されているので、
ここに /usr/local/lib を追記して、
あとは root になってから ldconfig を実行、ライブラリキャッシュを更新すれば OKだ。
おかげで man をひっくりかえしていろいろ調べるハメになってしまった。
勉強にはなったけど、なんだかなぁ。。
/etc/ld.so.conf に以下のような行を追記して、ldconfig を実行する必要がある、というお話。
# ld.so.confに追記が必要
/usr/local/lib
先日、DVDを見ようとして、libdvdread をインストールしたのだけど、
なぜだか、プログラム実行時に「libdvdread が見つかりません」というメッセージが出る。
/usr/local/lib を見ると、たしかに libdvdread.so が入っている。
どうやらこのパス自体がサーチ対象に入っていないらしい。。
ライブラリを置くディレクトリは通常、以下のようなお約束になっている。
/usr/lib → ディストリビューションが管理するライブラリ
/lib → 起動時に必要なライブラリ
/usr/local/lib → ユーザーが作成したライブラリ
プログラムを実行する際は、ダイナミックリンカー( ld-linux.so.* ) が、
上記のパスをサーチして必要なファイルをダイナミックリンクすることに、
なっている。
ただし、毎回、ディレクトリをサーチしてライブラリをリンクしていると、
処理が遅くなるので、 通常は ライブラリキャッシュ( /etc/ld.so.cache) を参照して
ダイナミックリンクする。このキャッシュを更新するのが ldconfig コマンドなのだ。
liblinux.so.* が参照するディレクトリは /etc/ld.so.conf に記載されているので、
ここに /usr/local/lib を追記して、
あとは root になってから ldconfig を実行、ライブラリキャッシュを更新すれば OKだ。
おかげで man をひっくりかえしていろいろ調べるハメになってしまった。
勉強にはなったけど、なんだかなぁ。。