アプリケーションが利用するライブラリの探索について
アプリケーションがlibpqやecpgといったFujitsu Enterprise Postgresの共有ライブラリを利用する場合、アプリケーション実行時にそれらのライブラリをロードする必要があります。
ライブラリのロードに当たり、ライブラリをマシン中から探索します。
ライブラリの探索では、探索する先のパスを指定できます。
パスの指定のために、アプリケーションやライブラリに記録されるDT_RUNPATH属性や、環境変数LD_LIBRARY_PATHが利用できます。
一般的に、DT_RUNPATH属性の利用が推奨されます。環境変数LD_LIBRARY_PATHは、該当アプリケーション以外の実行にも影響を及ぼしてしまう可能性があるためです。
以下では、DT_RUNPATHを利用する場合について説明します。
DT_RUNPATHの設定
アプリケーションのDT_RUNPATH属性に、利用するライブラリを格納する運用環境でのパスを設定するようにビルドしてください。
例えば、libpqやecpgを利用する場合、「<運用環境のFujitsu Enterprise Postgres クライアント機能のインストールディレクトリ>/lib」を設定してください。(注1)
DT_RUNPATH属性の設定方法は、ご利用のコンパイラ、またはリンカのドキュメントを参照してください。
設定するパスの種類や運用方法としては、以下の3種類があります。各運用に適した物を選択し、設定・運用してください。
「<ライブラリを格納するディレクトリの絶対パス>/lib」を設定します。
「<ライブラリを格納するディレクトリのアプリケーションからの相対パス>/lib」を設定します。
「(任意のパス)」を設定します。また、任意のパスの位置に、ライブラリを格納するディレクトリに対するシンボリックリンクを作成します。
例えば、gccでアプリケーションをビルドしている場合、gccのオプションとして“-Wl,-rpath,< 運用環境のFujitsu Enterprise Postgresのインストールディレクトリ/lib>,--enable-new-dtags”を付与することで、DT_RUNPATHが設定できます。
参照
DT_RUNPATHの設定については、例えば、リンカldのrpathやenable-new-dtagsオプションを参照してください。
また、アプリケーションからの相対位置の指定については、ld.soの$ORIGINを参照してください。
DT_RUNPATHが設定できない場合
上記のいずれの設定もできない場合、アプリケーションの実行に際し、環境変数LD_LIBRARY_PATHに、ライブラリを格納するディレクトリへのパスを設定することで、アプリケーションが必要とする共有ライブラリを見つけることができます。
ただし、LD_LIBRARY_PATHを設定した状態で、該当のアプリケーション以外のコマンドやプログラムを実行した場合、それらが実行時エラーになる、または期待しない動作となる可能性があることに注意してください。
参照
共有ライブラリの探索についての詳細は、ld.soのmanページの説明を確認してください。