我使用在 OS X 10.11.6 上运行的 Xcode 8 beta 遇到了这个问题,虽然我遇到了一个不同的特定问题,但调试方法对于所有情况都是相同的。
该otool
命令可用于准确查看指示链接器查找库文件的位置及其名称。
对我来说,otool -l {executable_path}
表明它正在寻找/System/Library/PrivateFrameworks/swift
10.12 (Sierra) 中引入的文件。因为我运行的是 10.11.6,所以这是一个很好的选择。(以及 Xcode 8 beta 中的一个已知错误)
查看otool
输出,有两件事可以看到:
LC_LOAD_DYLIB
命令,显示要包含的库的名称。
load 命令可能会显示文件的绝对路径,也可能会以@rpath/
用于查找文件的快捷方式作为前缀。
LC_RPATH
它显示了以 . 为前缀的库名称的搜索路径@rpath/
。
您可以通过在构建设置中LC_RPATH
包含字段来更改 (作为临时解决方法,让您再次编译)。对我来说,这意味着将 rpath 设置为相应 SDK 文件中的库文件,而不是. 出于多种原因,这样做充满了危险。所以不要忘记撤消它。-rpath {absolute_path_to_files}
Other Linker Flags
/System
如果您只是遇到构建层次结构的问题,您可以使用更轻松的方法。使用otool
您可以看到实际发生的情况,因此您可以智能地修改Runpath Search Paths
构建设置以跳转一个或两个目录,并查看它如何影响链接器的输出。