当使用关联的Swift库构建一个Swift命令行工具时,为什么框架被嵌入?
问题描述:
我建立的一个产生MacOS的命令行工具,具有相关联的定制斯威夫特库(.dylib
)简单迅捷的项目,但在编译和运行它时,有一个数字,显示形式的警告:当使用关联的Swift库构建一个Swift命令行工具时,为什么框架被嵌入?
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库设置为“否”。清理并构建仍会产生重复警告。
答
它看起来像有几件事,必须改变来解决这个:
- 设置运行时搜索路径包括
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx
或相应的库集。这些似乎包含比默认位置中存在的更新版本的Swift库。 - 设置与标准库链接到“否”。
- 通过拖动位于
.../usr/lib/swift/macos
位置的文件,手动指定要在命令行目标的“常规”选项卡上链接的库。 Swift项目需要libswiftCore.dylib
。
由于C绑定,我还必须包括libc
,但默认的(libc.tbc
)就足够了。