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

zig*_*375 5 linux libdispatch swift

我编译了libdispatch.这段代码有效:

import Dispatch
var lockQueue = dispatch_queue_create("com.test.async", nil);
Run Code Online (Sandbox Code Playgroud)

但是如果我把这段代码放到结束文件中:

dispatch_async(lockQueue) {
    print("test1");
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

使用未解析的标识符'dispatch_async'

Bra*_*son 3

正如我上面评论的,这似乎是Swift Package Manager 的当前限制。它当前不支持添加适当的编译时选项,例如支持块作为 GCD 函数的输入所需的选项 ( -Xcc -fblocks)。

同时,您可以避免使用 Swift 包管理器,并使用 swiftc 直接使用适当的选项编译文件。sheffler 在其测试存储库中提供了一个示例:

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
Run Code Online (Sandbox Code Playgroud)

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