在 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 顺序 的相关文章

  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 在另一个中使用 QAbstractListModel

    我在尝试使用 Qt QML 为我的应用程序开发数据模型时遇到问题 我已经用过一个QAbstractListModel能够将海关数据模型从 C 传递到 QML 并且它对于简单模型 例如基于字符串和布尔的模型 来说就像一个魅力 但现在我需要建立
  • 构建qt程序时未定义的符号:找不到qt_version_tag

    我正在学习Qt5 6 我正在使用 Ubuntu 14 4 当我链接我的程序时 出现以下错误 undefined reference to qt version tag 在 CMakeLists txt 中 link libraries Qt
  • 如何通过信号和槽传递参数?

    我的 GUI 包括LineEdit and a 按钮 当 的时候按钮单击后 插槽clicked 叫做 我想在之间建立信号槽关系clicked 作为信号和doSomething 作为插槽 问题是doSomething 无权访问 UI 并且do
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 我如何告诉 QTableWidget 结束编辑单元格?

    我正在显示一个弹出菜单来选择 QTableWidget 中的某些值 最下面的项目是 修改列表 条目 当我选择它时 应自动出现一个新窗口 并且 QComboBox 应消失 并且单元格返回到 Qt DisplayRole 状态 现在 Qt 拥有
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • Qt - 意外的 GDB 退出

    我正在尝试开发一个应用程序 该应用程序创建图像并使用双线性插值填充颜色像素 然后显示它 到目前为止我的代码如下 include
  • Qt QML MenuItem iconSource不显示

    我有一个非常简单的设置只是为了说明问题 import QtQuick Controls 1 4 import QtQuick Window 2 2 ApplicationWindow visible true width 640 heigh
  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • 如何在Qt中更快地读取数据?

    Qt读取数据库比C 慢吗 我想我错过了一些东西 为了比较阅读速度 我在 Qt 中编写了以下内容 QElapsedTimer t t start int count 0 QString cs Driver SQL Server Server
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • grep 彩色线条

    我编写了一个简单的 PHP shell 脚本 它解析文件并输出某些元素 它产生大量的输出 采用不同的 bash 颜色 绿色表示正常 黄色表示警告 红色表示错误等 在开发过程中我想过滤掉一些行 例如 所有包含红色文本的行 我可以使用grep
  • QWebView等待加载

    bool MainWindow waitForLoad QWebView view QEventLoop loopLoad QTimer timer QObject connect view SIGNAL loadFinished bool
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio

随机推荐

  • 一种将 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