私のプログラムが動的にリンクする同じライブラリの複数のバージョンがあります。時には、使用されるバージョンを変更したいことがあります。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
と表示される前のものと同じです。
おかげで、
アンドリュー
を私はソースから実行可能ファイルを構築していますので、私はそれが役立つならばオプションをリンク/コンパイルを変更することができます。 RPATHはコンパイル時に-Lオプションに基づいていますか?私が理解していない-Wl、-R/path/to/libがあります。私がやろうとしていることは、ドキュメントに基づいて明確にするだけでいいですか? – ajwood
プログラムにデフォルトを与える方法があるはずですが、実行時にユーザーが望むのであればユーザーにそれを上書きさせるように思えます。 – ajwood
RPATHにリンクすると(前述のように)、必要に応じてライブラリの検索パスがハードコードされます。主な問題はそれを変更することです。これは再リンクやpatchelfを使用して行うことができます。 – EmeryBerger