【发布时间】:2016-04-12 10:25:40
【问题描述】:
有没有办法在 Linux 上编译原生 C 或 C++ 代码并将其公开给 Swift?我可以看到像 libdispatch 这样的几个 Apple 库是用纯 C 编写的,您只需导入它们就可以在 Swift 中访问它们。
举个例子,假设我有两个文件Car.c 和Car.h,它们定义了名为Car 的结构。有没有办法通过编写 import 语句来编译它们并在 Swift 中使用它们?
import Car
我尝试在.c、.h 和Package.swift 文件所在的目录中写入module.modulemap 文件:
module Car {
header "Car.h"
export *
}
并运行swift build。这个产生错误:
<unknown>:0: error: unexpected 'commands' value (expected map)
<unknown>:0: error: unable to load build file
我使用的是 Swift 3.0-dev 版(2016 年 3 月 24 日)
[更新 1]
我已经联系了 Max(mxcl) - Swift Package Manager 的创建者之一,他告诉我删除 modulemap 并将 .c 和 .h 文件直接放在 Sources 文件夹中。在我编译了那个包但它不能作为模块使用之后。我也无法调用.h 文件中定义的任何函数。
【问题讨论】:
-
看看 Objective-C 桥接或模块。