我构建了一个简单的 Swift 项目,它生成了一个 macOS 命令行工具,并有一个关联的自定义 Swift 库 (.dylib
),但是在编译和运行它时,会出现许多形式的警告:
objc[9532]:类_SwiftNativeNSEnumeratorBase在/Applications/Xcode.app/Content/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib (0x100cca3f0) 和/Users/.../Build/Products/Debug/MyTool (0x1003e84c0) 中实现。将使用两者之一。哪一个是未定义的。
扫描生成的MyTool
二进制文件显示它包含该函数,因此我假设它已通过静态链接以某种方式烘焙。.dylib
希望它作为一个共享库存在,所以这似乎是重复的来源。
我已经在项目和目标级别尝试了许多设置,但除了显式嵌入选项之外,似乎没有一个控制将核心框架等内容作为静态库嵌入。
对于这两个目标,"始终嵌入 Swift 库">设置为"否"。清理并生成仍会产生重复警告。
看起来必须更改一些事情才能解决此问题:
- 设置运行时搜索路径以包括
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx
或相应的库集。这些似乎包括比默认位置中存在的库更新版本的 Swift 库。 - 将与标准库的链接设置为"否"。 通过在
- 命令行目标的"常规"选项卡上手动指定要链接到的库,方法是从
.../usr/lib/swift/macos
位置拖动这些库。一个 Swift 项目需要libswiftCore.dylib
。
由于C绑定,我还必须包含libc
,但默认的(libc.tbc
)就足够了。