2011-01-09 10 views
3

私のプログラムが動的にリンクする同じライブラリの複数のバージョンがあります。時には、使用されるバージョンを変更したいことがあります。Ubuntuの一時ライブラリ検索パス

私はUbuntuの新しいバージョンが安全上の理由から、もはやLD_LIBRARY_PATHをサポートしていないことを読んできました。私は/etc/ld.so.confにパスを追加してldconfigを実行することができましたが、私は常にシステムにroot権限を持っているとは限りません。

一般のユーザーが作成できるライブラリ検索パスを変更する方法を知っていますか?設定ファイルの更新が最後の手段であることがよくあると思われます。

編集:私がテストしているところ、私が見たいと思っていることなどは次のとおりです。プログラムでlddを実行し、libfoo.so => /some/path/to/lib/libfoo.soを参照してください。私はLD_LIBRARY_PATH/path/to/different/version/lib(libfoo.soという名前のファイルが含まれています)を付けて、lddに再実行します。 libfoo.soのパスは、私がlibfoo.so => /path/to/different/version/lib/libfoo.soと表示される前のものと同じです。

おかげで、

アンドリュー

答えて

7

あなたが任意の実行可能ファイルのRPATH(ライブラリ検索パス)を変更するpatchelfを使用することができます。これはクールなユーティリティで、特別な権限を必要としません。その後、最初の検索/opt/my-libs/lib/foo/libにプログラムを設定するには、ちょうどこの操作を行います。

% patchelf --set-rpath /opt/my-libs/lib:/foo/lib program 
+0

を私はソースから実行可能ファイルを構築していますので、私はそれが役立つならばオプションをリンク/コンパイルを変更することができます。 RPATHはコンパイル時に-Lオプションに基づいていますか?私が理解していない-Wl、-R/path/to/libがあります。私がやろうとしていることは、ドキュメントに基づいて明確にするだけでいいですか? – ajwood

+0

プログラムにデフォルトを与える方法があるはずですが、実行時にユーザーが望むのであればユーザーにそれを上書きさせるように思えます。 – ajwood

+0

RPATHにリンクすると(前述のように)、必要に応じてライブラリの検索パスがハードコードされます。主な問題はそれを変更することです。これは再リンクやpatchelfを使用して行うことができます。 – EmeryBerger