构建具有关联Swift库的Swift命令行工具时,为什么要嵌入框架?

时间:2017-05-24 21:11:41

标签: swift xcode dylib

我已经构建了一个简单的Swift项目,该项目生成一个macOS命令行工具,并且有一个关联的自定义Swift库(.dylib)但是在编译和运行它时会出现一些警告,这些警告显示在表单中:

  

objc [9532]:类_SwiftNativeNSEnumeratorBase在/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib(0x100cca3f0)和/ Users /中实现。 ../Build/Products/Debug/MyTool(0x1003e84c0)。将使用两者之一。哪一个未定义。

扫描生成的MyTool二进制文件表明它包含该函数,因此我假设它已经通过静态链接以某种方式被烘焙。 .dylib期望它作为共享库存在,所以它似乎就是重复发生的地方。

我在项目和目标级别尝试了很多设置,但似乎没有人控制将核心框架之类的内容嵌入到除显式嵌入选项之外的静态库中。

对于两个目标始终嵌入Swift库设置为“否”。清理和构建仍然会产生重复警告。

1 个答案:

答案 0 :(得分:0)

看起来有一些事情需要改变来解决这个问题:

  • 设置运行时搜索路径以包含/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx或相应的库集。这些似乎包含了一个比默认位置更新版本的Swift库。
  • 与标准库的链接设置为"否"。
  • 在" General"上手动指定要链接的库。命令行目标的选项卡,方法是从.../usr/lib/swift/macos位置拖动它们。 Swift项目需要libswiftCore.dylib

由于C绑定,我还必须包含libc,但默认值(libc.tbc)已足够。