在 QMake 中设置 RPATH 顺序

2023-11-27

我有一个 Linux Qt 程序。我希望它优先使用可执行文件目录中的(动态)Qt 库(如果存在),否则使用系统的 Qt 库。 RPATH 来救援。

我将此行添加到qmake的 .pro 文件:

QMAKE_LFLAGS    += '-Wl,-rpath,\'\$$ORIGIN\''

并查看生成的可执行文件readelf I see:

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,-rpath,\'\$$ORIGIN\'"
}

如果您希望它在可执行路径的子目录中查找,您可以使用:

QMAKE_LFLAGS += "-Wl,-rpath,\'\$$ORIGIN/libs\'"

请注意,您的应用程序目录中应该有名称完全相同的 .so 文件。例如你应该复制libQt5Core.so.5.2.0到您的应用程序目录,名称为libQt5Core.so.5。现在 ldd 显示应用程序的目录。

您还可以拥有libQt5Core.so.5.2.0以及一个带有名称的链接libQt5Core.so.5在应用程序目录中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 QMake 中设置 RPATH 顺序 的相关文章

随机推荐

  • 一种将 TD 置于 TR 中心的方法?

    我正在处理 HTML 电子邮件 并尝试将绿色 TD 放在白色 TR 中 以便在绿色框的左侧和右侧有 20 像素的白色边距 我尝试设置绿色部分的 TD 宽度并将边距设置为 0 auto 但绿色仅扩展到 TR 的宽度 尝试再放入 2 个 TD
  • 在 case 不起作用的情况下颤动多重

    是否可以根据多个文档 ID 获取价值 CollectionReference col1 Firestore instance collection service col1 where title isEqualTo Ac replacim
  • 支持向量机内核类型

    支持向量机中常用的核函数是线性 径向基函数和多项式 有人可以用简单的方式解释一下这个内核函数是什么吗 由于我是这个领域的新手 我不清楚这些内核类型的重要性是什么 让我们从头开始 支持向量机是一种线性模型 它总是寻找一个超平面来将一个类与另一
  • 如何使用SBT将一些文件复制到构建目标目录?

    如何复制一些源文件 例如 src main html html 到构建输出目录 例如 target scala 2 11 与 SBT 以便文件最终位于目标根并且不在classes子目录 如果我将源目录添加到 就会发生这种情况unmanage
  • 无法创建组件,因为它需要满足依赖关系

    我正在学习 DDD n Tier Repositories 等 有人向我推荐了 ASP NET Boilerplate 我决定使用它开始一个测试项目 我从未处理过依赖注入 所以这对我来说是全新的 但它使用 ius Castle Windso
  • Jquery next 找不到下一个 div?

    我有这个 HTML 结构 img width 25 height 25 src data apple logo jpg alt Chocolate
  • 在rails 4中重构大型routes.rb文件

    我正在将 Rails 3 应用程序升级到 Rails 4 0 1 在我的 Rails 3 应用程序中 我的目录中有以下代码application rb使用多个路由文件 config paths config routes Dir Rails
  • Mysql:将日期从“dd/mm/yyyy”转换为“yyyymmdd”

    我正在开发一个数据库 该数据库将日期存储在varchar 10 mysql 字段 太悲伤了 我无法更改数据库结构 我正在构建一个小插件 但我必须查询数据库 查找该数据字段在接下来的 10 天内的行 Example fid fdate 1 1
  • 基于应用程序变体的构建配置(BuildType + Flavor)

    我正在尝试设置signingConfig manifestPlaceholders buildConfigField对于应用程序变体 我可以为每个构建类型设置它们or ProductFlavor 独立 但我需要的是根据两个 ProductF
  • JS/jQuery 图像编辑器

    有没有人偶然发现用纯 JS 或 jQuery 完成的图像编辑器 就像 CKEditor 那样 我正在寻找一段代码 为图像添加句柄 以便您可以根据需要调整其大小 甚至拖动图像 谢谢 Edit 改写了 这是很棒的图像裁剪 调整大小 JQuery
  • 如何对Spark Structured Streaming进行单元测试?

    我想了解 Spark 结构化流的单元测试方面 我的场景是 我从 Kafka 获取数据 并使用 Spark 结构化流处理并在数据之上应用一些转换来使用它 我不确定如何使用 Scala 和 Spark 对此进行测试 有人可以告诉我如何使用 Sc
  • 如何将 Monad 实例定义为具有多个值的类型?

    我所说的多个值的意思是这样的 data Foo a Bar a Baz a a 我想不出一个明确的方法来定义 gt gt for Baz instance Monad Foo where Bar x gt gt f f x Great th
  • 如何在单击第 3 方按钮时设置断点?

    我正在尝试调试第 3 方小部件 1按钮准确地说 具体来说 我想在 Chrome 中设置一个断点 当单击小部件中的按钮时该断点会停止 我想打破处理的第 3 方代码click事件 是否有 Chrome 扩展 或其他我没有想到的东西 来帮助我在代
  • 为什么 System.Convert 有接受 DateTime 的 ToDateTime?

    Summary Returns the specified System DateTime object no actual conversion is performed Parameters value A date and time
  • Codeigniter 2.1 - 插入批次后返回 ids

    如何返回 insert bunch 之后的所有 ID 功能 public function insert slike id slike folder polje tabela slike explode slike i 1 data arr
  • Mathematica 中的错误:正则表达式应用于很长的字符串

    在下面的代码中 如果字符串 s 附加到大约 10 或 20 000 个字符 Mathematica 内核段错误 s This is the first line MAGIC STRING Everything after this line
  • 使用内联汇编在 C 中添加值

    我试图掌握 C 中内联汇编 ATT 汇编 的基础知识 所以我通过添加 2 个变量进行练习 好的 这按预期工作 这src变量被复制到dst变量 然后是dst变量加 5 的值src and dst分别为1和6 int src 1 int dst
  • IOS 5 如何更改导航栏中后退按钮的颜色?

    I want to change the color of back button of a navigation bar to make it look like this Set the backBarButtonItem s tint
  • Javascript 中与 64 位整数的按位 AND

    我正在寻找一种在 JavaScript 中对 64 位整数执行按位 AND 的方法 JavaScript 会将其所有双精度值转换为带符号的 32 位整数以执行按位运算 详细信息在这里 Javascript 将所有数字表示为 64 位双精度
  • 在 QMake 中设置 RPATH 顺序

    我有一个 Linux Qt 程序 我希望它优先使用可执行文件目录中的 动态 Qt 库 如果存在 否则使用系统的 Qt 库 RPATH 来救援 我将此行添加到qmake的 pro 文件 QMAKE LFLAGS Wl rpath ORIGIN