Linux Qt プログラムがあります。実行可能ファイルのディレクトリにある (動的) Qt ライブラリが存在する場合はそれを優先的に使用し、そうでない場合はシステムの Qt ライブラリを使用するようにしたいと思います。救助へのRPATH。
次の行をqmakeの .pro ファイルに追加します。
QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\''
結果の実行可能ファイルをreadelfで見ると、次のようになります。
0x000000000000000f (RPATH) Library rpath: [$ORIGIN:/usr/local/Trolltech/Qt-5.2.0/lib]
0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN:/usr/local/Trolltech/Qt-5.2.0/lib]
正しいようですが、lddはシステム バージョンを使用していることを示しています。
libQt5Core.so.5 => /usr/local/Trolltech/Qt-5.2.0/lib/libQt5Core.so.5 (0x00007f2d2fe09000)
qmake の結果の Makefile を手動で編集して 2 つの rpath の順序を交換すると、$ORIGIN が /usr/local/... の後に来るため、正しい動作が得られます。
0x000000000000000f (RPATH) Library rpath: [/usr/local/Trolltech/Qt-5.2.0/lib:$ORIGIN]
0x000000000000001d (RUNPATH) Library runpath: [/usr/local/Trolltech/Qt-5.2.0/lib:$ORIGIN]
libQt5Core.so.5 => ./libQt5Core.so.5 (0x00007fb92aba9000)
私の問題は、qmakeが最終的な LFLAGS 変数を構築する方法にあります。システム ライブラリの後に追加 ($ORIGIN) を追加する方法がわかりません。何か案は?