LPIC-1 Exam 101 無料問題 3 / 10 ・ 分野2: Linux Installation and Package Management
自作のアプリケーションの共有ライブラリを /opt/tool/lib に置いた。この場所を、再起動のあとも続けて動的リンカーに探させたい。手順として正しいものはどれか。
- /etc/ld.so.conf.d/ に /opt/tool/lib と書いた .conf を置き、ldconfig を実行する
- /etc/ld.so.cache に /opt/tool/lib と書き足し、ldconfig を実行する
- /etc/ld.so.conf.d/ に /opt/tool/lib と書いた .conf を置き、次にプログラムを起動するのを待つ
- /etc/ld.so.cache に /opt/tool/lib と書き足し、次にプログラムを起動するのを待つ
正解と解説を見る
正解: A
正解の理由
動的にリンクされたプログラムを起動すると、動的リンカー(ld.so・ld-linux.so)が共有ライブラリを探して結びつける。探す場所は /etc/ld.so.conf で決まり、いまはふつう、その中の include の行で /etc/ld.so.conf.d/ の .conf を読み込む形になっている。.conf には共有ライブラリのディレクトリを絶対パスで書く。ldconfig はこれらの設定を読んでライブラリへのリンクを作り直し、動的リンカーが使うキャッシュ /etc/ld.so.cache を書き直すので、設定を足したり変えたりしたあとは必ず ldconfig を実行する。
違う選択肢
「/etc/ld.so.conf.d/ に /opt/tool/lib と書いた .conf を置き、次にプログラムを起動するのを待つ」… 書く場所は合っているが、動的リンカーは設定のファイルを起動のたびに読むのではなく、ldconfig が作ったキャッシュを使う。ldconfig を実行するまで /opt/tool/lib はキャッシュに入らない。
「/etc/ld.so.cache に /opt/tool/lib と書き足し、ldconfig を実行する」… ldconfig を使う点は合っているが、/etc/ld.so.cache は ldconfig が作るキャッシュで、人が書き足すファイルではない。ldconfig を実行すると設定のファイルから作り直され、書き足した行は残らない。
「/etc/ld.so.cache に /opt/tool/lib と書き足し、次にプログラムを起動するのを待つ」… 書く場所も、反映させる手順も取り違えている。
押さえどころ
ldconfig は root 所有の /etc/ld.so.cache を書き換えるので、root で(または sudo を付けて)実行する。いまのキャッシュに何が入っているかは ldconfig -p、処理したディレクトリと作ったリンクを見ながら実行するなら ldconfig -v。ファイル名に正確な版を持つ共有ライブラリの実体を、版の短い名前(libc.so.6 など)のシンボリックリンクから指す作りが一般的で、そのリンクを整えるのも ldconfig の仕事。