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 引入模块映射,因此请调整它们以匹配您实际放置这些系统模块目录的位置。
我编译了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 引入模块映射,因此请调整它们以匹配您实际放置这些系统模块目录的位置。