在 macOS 上打印可执行文件的 rpath

2024-03-28

我想改变rpath一个可执行文件使用install_name_tool,但我不明白是什么rpath就是现在。install_name_tool既需要新的又需要旧的rpath是在命令行上给出的。我可以使用什么命令来打印rpathmacOS 下的可执行文件?


首先,请了解可执行文件不包含单个rpath条目,而是一个或多个条目的数组。

其次,你可以使用otool列出图像的rpath条目。使用otool -l,您将得到如下输出,其最后是rpath条目:

Load command 34
          cmd LC_LOAD_DYLIB
      cmdsize 88
         name /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (offset 24)
   time stamp 2 Wed Dec 31 19:00:02 1969
      current version 1038.32.0
compatibility version 45.0.0

Load command 35
          cmd LC_RPATH
      cmdsize 40
         path @loader_path/../Frameworks (offset 12)

寻找LC_RPATH命令并记下下面的路径path entry.

编辑:关于什么@loader_path是:它是引用想要加载框架的 Mach-O 对象的通用且动态的方式。

虽然这是一个相当人为的例子,但我认为它应该能够表达要点。假设我们有一个应用程序MyApp.app使用框架MyFramework.framework。我们还会说,为了正常运行,我要求我的应用程序安装在 /Applications 中,而不是其他地方。因此,所述应用程序和框架的结构如下:

/Applications/MyApp.app/Contents/MacOS/MyApp(可执行)/Applications/MyApp.app/Contents/Frameworks/MyFramework.framework/MyFramework(Mach-O dylib)

如果我们要跑otool -L(注意大写的 L)在可执行文件上它将显示有关 MyFramework 的以下内容:

@rpath/MyFramework.framework/Versions/A/MyFramework
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
/usr/lib/libobjc.A.dylib
/usr/lib/libSystem.B.dylib
....

请注意,因为 MyFramework.framework 使用@rpath安装名称/路径,我们需要有运行时搜索路径条目来替换@rpath在运行时。现在,我可以有一个 rpath 条目:

/Applications/MyApp.app/Contents/Frameworks

这是可行的,并且在运行时这两个部分将被组合在一起:

/Applications/MyApp.app/Contents/Frameworks + /MyFramework.framework/Versions/A/MyFramework ==

/Applications/MyApp.app/Contents/Frameworks/MyFramework.framework/Versions/A/MyFramework

显然,硬编码这样的路径并不理想,因为简单地将应用程序移动到不同的文件夹或重命名应用程序本身会导致链接失败。

@loader_path只是一种动态方式来引用应用程序的可执行文件,无论它存在于文件系统上的任何位置。在这种特殊情况下,在运行时它将填充正在运行的可执行文件的路径:/Applications/MyApp.app/Contents/MacOS/MyApp。然后我们可以说,要找到 MyFramework.framework,您只需转到一个目录并转到Frameworks.

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

在 macOS 上打印可执行文件的 rpath 的相关文章

随机推荐

  • Mysql 覆盖 vs 复合 vs 列索引

    在下面的查询中 SELECT col1 col2 FROM table1 WHERE col3 value1 AND col4 value2 如果我有 2 个单独的索引 其中一个位于col3另一个在col4 此查询中将使用其中哪一个 我在某
  • 哪些编译器支持 std::filesystem?

    感谢 C 11 在与 boost 长期相处之后 最后一个让我依赖它的组件是文件系统 根据链接 std filesystem 似乎是作为实验实现的 文件系统库 http en cppreference com w cpp experiment
  • 使用 freemarker 重新定位光标

    我正在使用免费标记和java 我必须将结果输出到txt 文件中 假设我必须打印 3 列 A B C 在类似的模式中 所有三个属性均为字符串 条件是 如果引用 A 的字符串长度超过 3 则应在下一行打印 也就是说 如果长度为 8 则前 3 个
  • php.ini - 设置 upload_tmp_dir

    我有一个允许用户上传照片的页面 我认为相当标准的 php 这适用于我迄今为止一直使用的实时服务器 但我最近在我的 Mac 上设置了 php 现在上传已停止工作 我猜这是因为 php ini 文件中的 upload tmp dir 没有正确设
  • 计算每行内字段的累积和

    免责声明 我是新手 我一直在广泛寻找问题的答案 但没有成功 如果我没有找到关于此的帖子 请向我推荐 我一直在尝试使用 awk 计算相当大的数据文件的每一行中每个字段的累积和 任何帮助将非常感激 我的文件包含数十万行 其中行的长度 字段数量
  • 在特定时间运行命令

    我正在尝试在特定时间运行命令 我看过 at 命令 但我不知道如何让它工作 这就是我所做的 at 1843 Enter php run this script php Ctrl D 但如何在 bash 脚本中执行此操作呢 我的意思是 我需要按
  • 从 apache 到 IIS 的反向代理总是失败并显示 404

    我正在尝试设置从 apache 到 IIS 7 服务器的反向代理 我已经设置了非常基本的代理规则
  • 如何在 iPhone Web 应用程序中将方向锁定为纵向模式?

    我正在构建 iPhone Web 应用程序 并希望将方向锁定为纵向模式 这可能吗 有没有任何网络工具包扩展可以做到这一点 请注意 这是一个用 HTML 和 JavaScript 编写的适用于 Mobile Safari 的应用程序 而不是用
  • 如何将变量设为特征的私有变量?

    我想在一个类中多次重用某个功能 此功能依赖于私有变量 trait Address private address public function getAddress return this gt address public functi
  • ASP/ASP.NET 短标签的名称

    有没有一个特定的名字 Scott Gu 将这些称为 代码块 这就是我的看法 http weblogs asp net scottgu archive 2010 04 06 new lt gt syntax for html encoding
  • CSS float 将带有换行文本的 div 折叠到所需的最小值

    示例图片 And the 代码位于 JSBIN http jsbin com ucamOW 1 情况是 我正在尝试创建一个带有标签的复选框列表 每个复选框旁边都有一个 信息图标 这个想法是 如果您单击标签 它将触发复选框 正如它应该的那样
  • 出现故事板之前的选项卡栏项目标题

    我的应用程序从一个有 5 个选项卡的选项卡栏控制器开始 一开始 第一个出现了它的名字 但其他四个没有名字 直到我点击它们 然后根据用户使用的语言显示名称 如何在选项卡栏出现之前设置选项卡的名称 我正在使用故事板 当所有其余的事情都通过情节提
  • 从没有实例的类中获取字段的名称

    因此 我使用以下实用程序从类的实例中获取字段 属性的名称 public static string FieldName
  • 如何避免在 getView() 中设置内联 onClickListener

    我有带有自定义适配器的 ListView 每行都包含可点击的按钮和文本 目前 onClickListeners 已在主体中设置getView 这是一个非常疯狂的想法 因为这个方法被频繁调用 在每个 onClick 函数中 我需要访问私有数据
  • 意外的未定义引用

    我收到未定义的引用错误 不知道原因 所以我有 2 个创建静态库的文件 keyboard input c keyboard input h 这是 h 文件的内容 ifndef MOD KBINPUT define MOD KBINPUT in
  • TensorFlow 是否使用 GPU 上的所有硬件?

    The 英伟达 GP100 https images nvidia com content pdf tesla whitepaper pascal architecture whitepaper pdf有30个TPC电路和240个 纹理单元
  • 如何使用非 rake 参数调用 rake

    我有一个创建图表的 rake 任务 task diagram do rake erd filetype dot disconnected true end 这个任务的执行速度相当慢 我猜这是因为在嵌套的 rake invoke 语句中 整个
  • MAMP SSL 错误:“错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败”

    我正在 OS X Yosemite 上使用 MAMP 在本地计算机上开发一个网站 该网站是一个在 HTTPS 上运行的 API 的客户端应用程序 当我尝试从 PHP 调用 API 时 不断收到此错误 error 14077410 SSL r
  • 如何在 Xamarin 中填充表视图?

    我正在尝试将 C Windows 应用程序移植到 Mac 但我一直试图用一堆字符串填充表视图 表视图似乎有两列 这对我来说很好 但我不知道如何访问单元格 行 列或添加项目 在 Windows 中 我做了类似的事情 foreach var i
  • 在 macOS 上打印可执行文件的 rpath

    我想改变rpath一个可执行文件使用install name tool 但我不明白是什么rpath就是现在 install name tool既需要新的又需要旧的rpath是在命令行上给出的 我可以使用什么命令来打印rpathmacOS 下