web-dev-qa-db-ja.com

アプリケーションでシステムの代わりにローカル共有ライブラリを使用する方法

Qtオンラインインストーラーを使用してqtcreatorをインストールしました。独自のバージョンのqtライブラリが同梱されています。 qtライブラリもシステムディレクトリにインストールされますが、古いものです。 qtcreatorに問題があります( qt-forums を参照)。これが疑われるのは、Qtが古いシステムライブラリを使用しているためかもしれません。

strace -e open qtcreator.sh

実際、/ usr/lib/x86_64-linux-gnu/qtcreator /のライブラリを使用します

正しいライブラリをロードするために、qrcreator.shスクリプトはLD_LIBRARY_PATHを

/home/<me>/Qt/Tools/QtCreator/lib:/home/<me>/Qt/Tools/QtCreator/lib/qtcreator

これは正しいですが、それでも/ usr/lib/x86_64-linux-gnu/qtcreatorのライブラリが使用されます。

システム全体のライブラリが存在するにもかかわらず、ローカルライブラリを使用するようにqtcreatorに指示するにはどうすればよいですか?

3
Nathan

Nathanのオプションに、実行可能ファイルのpatchelfを変更できるRPATHを追加します。 UbuntuはRPATHでこれらを定義する問題があり、profileでこれを定義していないかのように、LD_LIBRARY_PATHなどを定義するよりもprofileをパッチすることを個人的に好みます。ラッパースクリプトの。

アプリケーションのディレクトリに相対的な実行可能ファイルRPATHを定義するには(必要な場合は必須ではありません)、$Originを使用する必要があります$をエスケープするには、文字どおりに表示する必要があります(シェルからpatchelfを呼び出す場合は、\$Originを使用します)。例アプリケーションがbinディレクトリに属し、ライブラリがピアlibディレクトリに属する​​場合、RPATHには$Origin/../libを使用します。

必要に応じて、絶対RPATHを使用することもできます。

Patchelf(nixos.org) を参照してください。

0
Hibou57

「LD_PRELOAD」環境変数を使用してライブラリをプリロードできます。 soファイルのフルパスを次のように指定するだけです。

export LD_PRELOAD = "/path/to/so1.so /path/to/so2.so"
0
Nathan