如何让 Xcode 设置 LC_RPATH(以便 @rpath 加载起作用)?

问题描述 投票:0回答:2

我想制作一个命令行工具,其中包含一些它需要的捆绑框架(SDL 和相关库)。我将 Xcode 设置为“嵌入并签名”这些框架,这会导致它们被复制到可执行文件旁边的构建文件夹中。生成的可执行文件在 Xcode 中正确运行。

但是当我尝试在命令行上运行相同的可执行文件时,它失败并显示:

dyld: Library not loaded: @rpath/SDL2.framework/Versions/A/SDL2
  Referenced from: /Users/jstrout/Data/CPP-dev/soda/Build/Products/Debug/./soda
  Reason: image not found
zsh: abort      ./soda

尽管如此,相对于当前(和可执行文件)目录,该映像确实位于 SDL2.framework/Versions/A/SDL2。问题似乎是 rpath 设置不正确。我所有的搜索都表明我应该在可执行文件上的

otool -l
的输出中找到 LC_RPATH 命令,但实际上根本没有 LC_RPATH 命令(尽管有几个引用 @rpath 的 LC_LOAD_DYLIB 命令)。

所以。我必须在 Xcode 中做什么才能使其链接器发出正确的 LC_RPATH 命令?或者,如果我完全找错了树:如何让我的命令行可执行文件引用旁边的框架?

xcode linker dylib rpath otool
2个回答
0
投票

答案似乎是(感谢@Siguza):

  1. 导航到项目设置,选择左侧的目标和顶部的“全部”。
  2. 在“链接”下,找到“其他链接器标志”,然后输入
    -rpath @executable_path/

构建现在会在可执行文件中生成正确的 LC_RPATH 命令,并且能够找到旁边的框架。


0
投票

如果这对某人有帮助,现有的答案对我不起作用,但将

@executable_path/
添加到我的目标的 Runpath Search Paths 却可以。

来自:dyld:未加载库:@rpath/libswiftCore.dylib /未找到图像

© www.soinside.com 2019 - 2024. All rights reserved.