Cmake:如何使用 cmake 将 rpath 设置为 ${ORIGIN}

2023-12-20

根据这个SO问题,Linux 可执行文件在同一文件夹中找不到共享库 https://stackoverflow.com/questions/39978762/linux-executable-cant-find-shared-library-in-same-folder通过-Wl,-rpath,${ORIGIN}是获取 Linux 可执行文件进行搜索的方法.so与可执行文件位于同一目录中。

我们正在使用 cmake,所以我添加了一行形式

target_link_options(Executable PRIVATE -Wl,-rpath=${ORIGIN})

到 CMakeLists.txt。问题是 cmake 尝试解释九个字符序列${ORIGIN}作为变量,并将其替换为空。

到目前为止,我已经尝试过:

$${ORIGIN}
\${ORIGIN}
$\{ORIGIN\}
$$\{ORIGIN\}
\$\{ORIGIN\}

这些都没有奏效。我怎样才能完成这件事?

- 编辑 -

正如 @Tsyvarev 的评论所指出的,事实证明,在我的特定情况下这是一个 XY 问题,因为 cmake 具有直接设计用于操作 rpath 的设施。使用这个,我能够得到一个解决方案。

就我而言,将以下三行添加到 CMakeLists.txt 就可以了。

SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "$\{ORIGIN\}")

请注意,我们构建过程的一部分涉及复制.so到输出文件夹,为构建最终的 tarball 工件做准备。所以使用-rpath=${ORIGIN}适用于构建树中的测试以及 Docker 容器中可执行文件的最终安装。


正如您已经注意到的,您应该使用CMAKE_INSTALL_RPATH or INSTALL_RPATH. INSTALL_RPATH设置rpath安装特定目标时。CMAKE_INSTALL_RPATH是全局变体,对所有目标执行相同的操作。

我也挣扎过,如何逃脱$ORIGIN。 但是,对我来说,它根本不需要逃避它:

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

Cmake:如何使用 cmake 将 rpath 设置为 ${ORIGIN} 的相关文章

随机推荐

  • 如果我没有关闭 PHP 标签,Notepad++ 函数列表 PHP 将无法工作

    我想在我的 PHP 代码中使用 notepad 的函数列表功能 实际上 如果我编写关闭 PHP 标签 gt 则函数列表可以正常工作 但是如果我没有关闭 PHP 标签 则函数列表将无法工作 我只是想 即使我没有关闭 PHP 标签 函数列表仍然
  • Ajax表单提交,文件未提交

    我正在尝试为我的 Django 表单实现 AJAX 表单提交 这些文件是在没有 AJAX 的情况下提交的 因此服务器端的逻辑似乎可以正常工作 使用ajax 除了文件之外的其余值都会被提交 这是我正在实现的代码 AJAX表单提交 functi
  • XPS 文件的结构是什么

    我认为 XPS 文件就像 PDF 文件 但是 XPS 文件的结构是什么 类似于 PDF 文件吗 CNET 上的 XPS 与 PDF http reviews cnet com 4520 3672 7 6673717 2 html Excer
  • 自定义键盘出现约 5 秒延迟

    我正在使用 objc Xcode 7 制作自定义键盘 尝试了 6 次 问题是键盘加载速度太慢 我尝试加载完全空的UIInputViewController的观点 没有变化 我没有xib 没有大量资源 如果有人知道这个问题的任何解决方案 请写
  • 更新 Javascript 2D 数组中的元素会更新整个列[重复]

    这个问题在这里已经有答案了 我在 Javascript 中创建了一个 2D 数组 4x4 如下所示 let visited new Array 4 fill new Array 4 fill false console log visite
  • Xcode 中的垂直突出显示(列选择)

    如何在 Xcode 中突出显示矩形选区 按住 Option 键的同时单击并拖动 进行垂直突出显示 块选择时 应用正常的复制和粘贴规则 command c 和 command v
  • 如何禁用 Dexguard?

    我浏览了文档 寻找如何在运行 gradle 时禁用 dexguard 但保留插件 dexguard 我尝试修改 proguardFilegetDefaultDexGuardFile dexguard debug pro 什么也不做 但不幸的
  • 键盘关闭时的背景故障

    我面临着我的片段布局 xml 有点复杂的情况 所以层次结构如下 相对布局 无背景 ScrollView fillViewPort true 滚动条 none FrameLayout 无背景 LinearLayout 无背景 Relative
  • 如何在flutter中从ModalBottomSheet刷新ParentStatefulWidget的状态

    我是颤振新手 我对小部件的状态没有正确的了解 我正在创建一个应用程序 在其中从主屏幕向购物车添加一些商品 然后单击 Cartbutton 我打开 ModalBottomSheet 用户还可以在其中修改其购物车商品 以及当用户关闭 Modal
  • 在 jekyll 中生成针对 github 页面的类别页面

    我正在尝试使用 jekyll 为我的 github 页面博客生成类别页面 当我在本地运行时使用jekyll serve这有效 因为它可以使用我的插件 使用这个例子从文档 https jekyllrb com docs plugins gen
  • IIS6 - 为什么我的自定义错误页面不显示?

    我有一个应该显示 HTTP 404 错误的自定义错误页面 事实并非如此 我很难弄清楚为什么 我的 web config 已设置
  • imap:从 C++ 程序发送电子邮件时“无法创建可选择的 TCP 套接字”

    我正在尝试使用 imap 库从 C 程序发送电子邮件 我有一个 Google Apps 和一个要向其发送电子邮件的 Gmail 帐户 每当程序无法发送电子邮件时 我都会将错误记录到文件中 我将程序设置为循环运行以发送电子邮件 有时 我收不到
  • Jsoup POST:定义返回 HTML 的选定选项?

    我正在尝试生成一个 HTML 帖子到一个包含选项列表的页面 有一个下拉列表 用户可以在其中选择一个项目 然后单击生成按钮 根据所选的选项 它会返回不同的结果 我对前后的 HTML 进行了比较 可以看到差异如下 Before
  • 对齐表标题中的文本

    它似乎align不适合th元素 这是我的 HTML div style width 100 height 175px table class grid thead tr th class not mapped style style dis
  • 合并bean定义的后处理失败;嵌套异常是 java.lang.IllegalStateException

    这是我的 OffersDao 课程 package com spring dao import java sql import javax sql DataSource import org springframework beans fa
  • 在我的网站上添加最新推文作为纯文本?

    我有一个 HTML CSS 网站 想要在页脚部分添加我最新的推文 请注意以下几点 我不喜欢他们网站上可用的 Twitter 小部件的外观 我只想将我最新的推文显示为文本 只是最后一条 而不是几条 然后我将添加背景并通过 CSS 自定义字体
  • 如何使用 jasmine 测试带有 DOM 元素的 JavaScript?

    我正在尝试在 jasmine 中为包含 DOM 元素的 JavaScript 代码编写一个测试 但该测试不起作用 当我仅测试 JavaScript 代码 只是简单的函数 但不适用于 DOM 元素 时 它可以工作 我研究了这么久 确实找不到答
  • CollectionView Cell 在水平滚动后向右移动

    我有一个与 CollectionView 大小相同的 collectionView Cell 即一次在屏幕上显示一个 Cell 并且我希望单元格之间的最小间距为 10 问题是当我滚动单元格时 单元格无法正确贴合整个屏幕 并且每次滚动后单元格
  • 将 &T 迭代器收集到 T 集合中的惯用方法是什么?

    我需要收集一个迭代器 strs 进入一个集合 strs 问题是迭代器产生 strs 我尝试从映射 word to word 虽然它有效 但我不知道它是否被认为是好的 或者是否有更好的选择 问题 use std collections Has
  • Cmake:如何使用 cmake 将 rpath 设置为 ${ORIGIN}

    根据这个SO问题 Linux 可执行文件在同一文件夹中找不到共享库 https stackoverflow com questions 39978762 linux executable cant find shared library i