我正在尝试将Swift函数与Python接口。Python可以解释.dylib
中的任何@_cdecl
函数
对于具有单个Swift源的项目目录:
project/
test.swift
test.py
我可以运行swiftc test.swift -emit-library
生成一个.dylib文件
更高级的是,使用Swift软件包,它如下所示:
project/
TestPackage/
...
test.py
在我的Swift包中,我可以像这样将-emit-library
参数传递给Swift构建中的Swift编译器:swift build -Xswiftc -emit-library
。这会将我的包导出到.dylib
我的问题是向包中添加依赖项。我添加了SwifterSwift包作为一个依赖项,只是为了测试,然后运行swift build -Xswiftc -emit-library
。我得到了这个错误:
swift build -Xswiftc -emit-library
Undefined symbols for architecture x86_64:
"_$s10Foundation4DateV12SwifterSwiftE11weekOfMonthSivg", referenced from:
_$s11TestPackage6swiftyyyF in TestPackage.swift.o
ld: symbol(s) not found for architecture x86_64
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
但是,看起来SwifterSwift成功导出了.dylib。但我的主要项目TestPackage没有swift build
本身就可以工作,但没有达到生成.dylib的目标
问题:
如何使整个包编译为带有依赖项的.dylib?我是否缺少链接器命令
在对
swift build
和swiftc
变体进行了数小时的实验后,我发现了更简单的解决方案:在清单中,将type设置为dynamic
.library(name: "TestPackage", type: .dynamic, targets: ["TestPackage"]),
在
swift build
(无特殊参数)之后,可以在以下位置找到.dylib:TestPackage/.build/x86_64-apple-macosx/debug/libTestPackage.dylib
现在我可以在Python中使用一些Swift包了
相关问题 更多 >
编程相关推荐