ldconfig - 共有ライブラリのリンクと検索キャッシュの作成

スポンサーリンク

ldconfigコマンドは共有ライブラリを使用するプログラムの実行のために、共有ライブラリのシンボリックリンクの作成や共有ライブラリを検索するためのキャッシュを作成するコマンドになります。

共有ライブラリを利用するプログラムは作成したが、ライブラリのロードができなくて、実行に失敗してしまうときに利用するコマンドかもしれません。

また、このコマンドはgcc等のコンパイル時のリンクのためのものではない点は注意が必要かもしれません。

リンクとキャッシュファイルの作成

ldconfigコマンドの関連ファイルは設定ファイル/etc/ld.so.confとキャッシュファイル/etc/ld.so.cacheがあります。
ldconfigコマンドは設定ファイルから検索するパスを読み取り、そのパスからプログラムの実行時に利用するための共有ライブラリのキャッシュファイルを作成します。

例えば、共有ライブラリとその共有ライブラリを必要とするプログラムを作成してみます。

ここで、まずは作成したプログラムを実行すると

共有ライブラリのロードに失敗をしてエラーが表示されます。

/etc/ld.so.confに共有ライブラリが存在するパスを追加します。/etc/ld.so.confは/etc/ld.so.conf.dというディレクトリから設定ファイルを読み込んでいるので、そのディレクトリに設定ファイルを入れます。

 

ldconfigコマンドを実行します。ここで、共有ライブラリにSONAMEを設定したので、シンボリックリンクも作成されます。まず、ldconfigコマンドを実行する前に作業ディレクトリの内容を確認し、その実行後にシンボリックリンクも作成されていることを確認します。

さらにldconfigによってキャッシュファイル/etc/ld.so.cacheも更新されたので実行時に共有ライブラリのロードによってエラーが出ていたプログラムの実行もできるようになります。

 

 

 

キャッシュの内容を表示(-pオプション)

-pオプションを用いるとキャッシュの内容を表示できます。
通常で用いるととても多くの行数が表示されるので、ここでは、前述で作成したlibsharedprogについて表示します。

 

 

 

詳細な情報を表示(-vオプション)

-vオプションを用いるとldconfigコマンドの実行について詳細な情報が表示されます。ここではいくつか情報を省略して紹介します。

いくつか検索するディレクトリが存在しない等のエラーメッセージが出ていたので、エラーメッセージを捨てています。

 

-vオプションとgrepコマンドを用いて、検索パスの一覧を表示することもできます。

また、シンボリックリンクの作成が行われるときは以下のようなメッセージが表示されます。

 

 

 

個々のライブラリのリンクを作成(-lオプション)

-lオプションは個々の共有ライブラリのSONAMEのシンボリックリンクを作成を作成します。

SONAMEはobjdumpコマンドで確認ができます。

 

 

 

(補足)使用したプログラム

sharedprog.c

testprog.c

 

 

 

(補足)SONAMEを付けたプログラムのコンパイル

SONAMEを付けたプログラムのコンパイルを行う場合は、gccコマンドで
-Wlオプションをつけて、リンカにオプションを渡します。-Wlオプションで渡すオプションの区切り文字はスペースではなく、コンマで行われます。

SONAMEをつける場合は"-Wl,-soname,<共有ライブラリのSONAMEの名称>"をオプションに渡します。

SONAMEをつけて作成できたかどうかは、objdumpコマンドで確認できます。

 

 

 

(補足)ldconfigコマンドでキャッシュを作成しなくても共有ライブラリを利用できるコンパイル方法

gccコマンドで-WlオプションでRPATHを設定するとそのRPATHのパスから共有ライブラリを検索して利用できます。
RPATHをつける場合は"-Wl,-rpath,<RPATHに設定するパス>"をオプションに付けます。

RPATHをつけて作成できたかどうかはobjdumpコマンドで確認できます。

相対パスもできるらしいです。