fixedpoint.jp - Shared library runtime search paths で気になること




Shared library runtime search paths で気になること

プログラムが共有ライブラリに依存している場合、プログラムの実行時にそのライブラリが実際にどこにあるかを探すのは dynamic linker & loader の役目です。

Unix 由来の OS では ld.so などと呼ばれるプログラムがこの役割を果たします。

ld.so が共有ライブラリの実体を探す場所(パス)を調整する昔ながらの方法がいくつかあります:

最近では、これらの方法にはそれぞれ問題があるため原則として避けるべき、という意見がよく見受けられます:

LD_LIBRARY_PATH
指定されたパスが既定の探索パスより優先され、そのプロセス(や子プロセスなど)での全ての探索に関係するので、意図しない範囲に影響する可能性がある
LD_RUN_PATH
リンク時に -rpath が与えられていると無視される
-rpath
同名のライブラリが複数の異なるバージョンでシステムに存在する場合、間違ったバージョンの方を見つけてしまう可能性がある

代替となる手段はプログラムごとに、またターゲットとする OS や実行形式ごとに異なるでしょう。

こうなってくると Mac OS X の dyld(1) というやや毛色の異なる仕組みも悪くないような気がしてきます。

参考


© 2006-2011 Takeshi Abe