我有一个 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 以交换两个 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)放在系统库之后。有任何想法吗?