Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 在QMake中设置RPATH命令大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个 Linux Qt程序.我希望它优先使用可执行文件目录中的(动态)Qt库(如果存在),否则使用系统的Qt库. RPATH来救援. 我将此行添加到qmake的.pro文件中: QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\'' 用readelf查看生成的可执行文件,我看到: 0x000000000000000f (RPATH)
我有一个 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).有任何想法吗?

@R_404_1964@

您可以将以下内容添加到.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的链接.

大佬总结

以上是大佬教程为你收集整理的linux – 在QMake中设置RPATH命令全部内容,希望文章能够帮你解决linux – 在QMake中设置RPATH命令所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。