Linux での動的ライブラリの検索順序 (ld.so man ページから) は次のとおりです。
- 存在し、DT_RUNPATH 属性が存在しない場合、バイナリの DT_RPATH 動的セクション属性を使用します。DT_RPATH の使用は非推奨です。
- 環境変数 LD_LIBRARY_PATH を使用します。実行可能ファイルが setuid/setgid バイナリである場合を除き、その場合は無視されます。
- 存在する場合、バイナリの DT_RUNPATH 動的セクション属性を使用します。
- 拡張ライブラリ パスで以前に見つかった候補ライブラリのコンパイル済みリストを含むキャッシュ ファイル /etc/ld.so.cache から。ただし、バイナリが -z nodeflib リンカー オプションでリンクされた場合、デフォルトのライブラリ パス内のライブラリはスキップされます。
- デフォルト パス /lib、次に /usr/lib。バイナリが -z nodeflib リンカー オプションでリンクされている場合、この手順はスキップされます。
リンク時に設定する
- DT_RUNPATH: -Wl,--enable-new-dtags -Wl,-R$(RUNPATH) を使用
- DT_RPATH: -Wl,--disable-new-dtags -Wl,-R$(RPATH) を使用
理論的には、ユーザーが制御できる LD_LIBRARY_PATH が優先されるため、DT_RUNPATH を使用することをお勧めします。ただし、ここではユーザー コントロールを避けたいので、DT_RPATH を使用します。リンク行で:
-Wl,--disable-new-dtags -Wl,-R/opt/my_prog/lib