我想制作一个命令行工具,其中包含一些它需要的捆绑框架(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 命令?或者,如果我完全找错了树:如何让我的命令行可执行文件引用旁边的框架?
答案似乎是(感谢@Siguza):
-rpath @executable_path/
构建现在会在可执行文件中生成正确的 LC_RPATH 命令,并且能够找到旁边的框架。
如果这对某人有帮助,现有的答案对我不起作用,但将
@executable_path/
添加到我的目标的 Runpath Search Paths 却可以。