0

我有一个用 Swift 编写的命令行工具。我在其他相关的应用程序中使用 Lumberjack,所以我想让它在这个应用程序中工作。命令行工具不导入 AppKit。根据 DDTTYLogger.h 文件,如果定义了 DD_CLI,自定义颜色定义。(CLIColor.h/m) 是导入的,而不是 AppKit/NSColor.h,所以看来我不应该得到错误。

到目前为止,我已经尝试将 –DDD_CLI 添加到 Swift 编译器,其他 Swift 标志。我还尝试将 CLIColor.m 添加到构建中。我不知所措......有人有这方面的经验,或者我可以尝试其他一些事情吗?

感谢您的反馈。

4

1 回答 1

2

我使用在 OS X 10.11.6 上运行的 Xcode 8 beta 遇到了这个问题,虽然我遇到了一个不同的特定问题,但调试方法对于所有情况都是相同的。

otool命令可用于准确查看指示链接器查找库文件的位置及其名称。

对我来说,otool -l {executable_path}表明它正在寻找/System/Library/PrivateFrameworks/swift10.12 (Sierra) 中引入的文件。因为我运行的是 10.11.6,所以这是一个很好的选择。(以及 Xcode 8 beta 中的一个已知错误)

查看otool输出,有两件事可以看到:

  1. LC_LOAD_DYLIB命令,显示要包含的库的名称。
    load 命令可能会显示文件的绝对路径,也可能会以@rpath/用于查找文件的快捷方式作为前缀。
  2. LC_RPATH它显示了以 . 为前缀的库名称的搜索路径@rpath/

您可以通过在构建设置中LC_RPATH包含字段来更改 (作为临时解决方法,让您再次编译)。对我来说,这意味着将 rpath 设置为相应 SDK 文件中的库文件,而不是. 出于多种原因,这样做充满了危险。所以不要忘记撤消它。-rpath {absolute_path_to_files}Other Linker Flags/System

如果您只是遇到构建层次结构的问题,您可以使用更轻松的方法。使用otool您可以看到实际发生的情况,因此您可以智能地修改Runpath Search Paths构建设置以跳转一个或两个目录,并查看它如何影响链接器的输出。

于 2016-08-01T04:01:33.120 回答