linux – 在QMake中设置RPATH命令
发布时间:2020-12-14 02:21:40 所属栏目:Linux 来源:网络整理
导读:我有一个 Linux Qt程序.我希望它优先使用可执行文件目录中的(动态)Qt库(如果存在),否则使用系统的Qt库. RPATH来救援. 我将此行添加到qmake的.pro文件中: QMAKE_LFLAGS += '-Wl,-rpath,'$$ORIGIN'' 用readelf查看生成的可执行文件,我看到: 0x0000000000000
我有一个
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).有任何想法吗? 解决方法
您可以将以下内容添加到.pro文件中,以强制动态链接器在运行时在Linux中查找与Qt应用程序相同的目录:
unix:{ # suppress the default RPATH if you wish QMAKE_LFLAGS_RPATH= # add your own with quoting gyrations to make sure $ORIGIN gets to the command line unexpanded QMAKE_LFLAGS += "-Wl,'$$ORIGIN'" } 如果您希望它查看可执行路径的子目录,您可以使用: QMAKE_LFLAGS += "-Wl,'$$ORIGIN/libs'" 请注意,应该在应用程序目录中具有完全相同名称的.so文件.例如,您应该将libQt5Core.so.5.2.0复制到名为libQt5Core.so.5的应用程序目录中.现在ldd显示了应用程序的目录. 您还可以在应用程序目录中使用libQt5Core.so.5.2.0及其名称为libQt5Core.so.5的链接. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |