2016-01-08 12 views
5

コンパイルlibdispatch。 このコードが機能している:LinuxのSwift:未解決の識別子 'dispatch_async'の使用

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

をしかし、私は、ファイル終了するためにこのコードを置く場合:私はこれがに表示され、上記のコメントのよう

use of unresolved identifier 'dispatch_async'

+2

libdispatchをSwiftにプルするために使用しているモジュールマップは何ですか?パッケージマネージャを使用していますか? –

+0

私は公式のモジュールを使用しています:https://github.com/apple/swift-corelibs-libdispatchはい、最初のコードブロックが動作しています。 'import Dispatch'と' dispatch_queue_create'が動作します。 – zig1375

+2

この問題はhttps://bugs.swift.org/browse/SR-397と​​関連しています。必要なブロックが見つからないlibdispatch関数が呼び出されます。 Swift Package Managerは、これを動作させるためのモジュール用のカスタムコンパイラフラグをサポートできる必要があるようです。 –

答えて

3

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

を、私はエラーを得ましたa current limitation with the Swift Package Managerとなります。 GCD関数への入力としてブロックをサポートするために必要なもの(-Xcc -fblocks)など、適切なコンパイル時オプションの追加は現在サポートされていません。

その間、Swift Package Managerを避け、swiftcを使用してファイルを適切なオプションで直接コンパイルできます。例はtheir test repositoryに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 

-Iオプションはlibdispatchのためのあなたのモジュールのマップに引っ張るので、あなたが実際にこれらのシステムモジュールのディレクトリを配置した場所と一致するように、これらを調整します。

関連する問題