【发布时间】:2014-11-11 18:46:25
【问题描述】:
设置
-
我在我的主目录中有一个本地安装的 Qt:
/home/user/Qt/...(从现在开始,devdir)。 -
我正在尝试打包的 Qt 应用程序将相关的 Qt 共享库安装到
/usr/lib/myapplication(从现在开始,installdir)。 -
我的打包流程目前是这样设置的:
qmake>dh_make -s --createorig>debuild
问题
我正在尝试将 myapplication.pro 中的 RPATH 设置为仅链接到 installdir 中的库,但它目前正在链接到两个 installdir em> 和 devdir.
我认为这与qmake 自动创建对安装库的依赖关系有关。为了阻止它,我使用qmake -nodepend 运行了构建过程,但这并没有阻止到 devdir 的链接发生。
如何强制qmake 仅链接到installdir 中的库?
代码
在 myapplication.pro 中:
QMAKE_LFLAGS = -Wl,-rpath,/usr/lib/myapplication
Makefile 中生成的链接标志是:
LFLAGS = -Wl,-rpath,/usr/lib/myapplication -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-rpath,/home/user/Qt/5.3/gcc_64 -Wl,-rpath,/home/user/Qt/5.3/gcc_64/lib
【问题讨论】:
-
AFAIK,
RPATH在确定在运行时加载哪些库方面发挥作用。也许是LIBPATH(即-Linstalldir)你应该触摸什么......? -
@Kalrish 据我了解,
LIBPATH在构建时链接到库,这很好,因为 devdir 是我用来构建项目的。如果我只有静态库,改变它就可以了。RPATH决定了应用程序在另一个系统上执行时将在哪里查找共享库 - 所以我想告诉RPATH只在 installdir 中查找。 -
那么,看来你需要将
RPATH设置为devdir和installdir:前者用于开发,后者用于发布程序.见this answer。顺便说一句,我认为RPATH已被弃用,而RUNPATH是首选。 -
@Kalrish 是的,正是我的想法。我现在处于发货阶段,想设置
RUNPATH,使其仅链接到installdir。它目前正在链接到两者,devdir 由 qmake 自动链接。我想阻止它这样做,否则我将不得不在构建后不断地chrpath。也许问题的原始措辞不清楚? -
虽然我不知道 qmake,但他正确的变量似乎是 (
QMAKE_LIBDIR)[qt-project.org/doc/qt-4.8/… (链接时搜索库的库目录) 和 (QMAKE_RPATHDIR)[ qt-project.org/doc/qt-4.8/…(您使用的是 Qt 4.8,对吗?)。您可以在开发过程中使用LD_LIBRARY_PATH,将QMAKE_LIBDIR设置为devdir 并将QMAKE_RPATHDIR设置为installdir(如果默认情况下它不在您的发行版的默认目录中) ; 毕竟,这些设置是每个发行版的)。
标签: qt makefile qmake dynamic-linking