Swift 在 Linux 中:使用了未解析的标识符 'dispatch_async'

Swift in Linux: use of unresolved identifier 'dispatch_async'

我编译了libdispatch。 此代码有效:

import Dispatch
var lockQueue = dispatch_queue_create("com.test.async", nil);

但是如果我把这段代码放到文件末尾:

dispatch_async(lockQueue) {
    print("test1");
}

我收到一个错误:

use of unresolved identifier 'dispatch_async'

正如我在上面评论的那样,这似乎是 a current limitation with the Swift Package Manager。它目前不支持添加适当的 compile-time 选项,例如支持块作为 GCD 函数输入所需的选项 (-Xcc -fblocks)。

与此同时,您可以避免Swift软件包管理器,并使用SwiftC直接使用适当的选项编译文件。 sheffler 在 their test repository:

中提供了一个示例
swiftc -v -o gcd4 Sources/main.swift -I .build/debug -j8 -Onone -g -Xcc -fblocks -Xcc -F-module-map=Packages/CDispatch-1.0.0/module.modulemap -I Packages/CDispatch-1.0.0 -I /usr/local/include

-I 选项将为 libdispatch 引入模块映射,因此请调整它们以匹配您实际放置这些系统模块目录的位置。