【问题标题】:Replacing RPATH when Deploying Qt Shared Libraries部署 Qt 共享库时替换 RPATH
【发布时间】: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设置为devdirinstalldir:前者用于开发,后者用于发布程序.见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


【解决方案1】:

/home/user/Qt/5.3/gcc_64 的路径可以通过覆盖QMAKE_RPATHDIR 来删除。要抑制两个路径,变量QMAKE_LFLAGS_RPATH 应该为空,如Setting RPATH order in QMake

# rpath variables for unix
unix: {
    # suppress the default RPATH
    QMAKE_LFLAGS_RPATH =
    # add custom path
    QMAKE_LFLAGS = -Wl,-rpath,/usr/lib/myapplication
}

【讨论】:

    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多