2016-11-27 5 views
0

Swiftで書かれたプロジェクトにC++ファイルを追加しました。いくつかの乱数を計算するだけで、ベクトル配列も使用します。ラッパーはObjective-Cで書かれています。私がcppファイルから関数を呼び出そうとすると、Appはしばらくしてクラッシュします。しかし、奇妙な動作があります。なぜなら、C++コードを実行している間にクラッシュすることはないからです。これでも何もすることはありません。コンソールには次のように表示されます:Swift ProjectでC++ファイルを使用する

'pthread_mutex_lock(&mutex)' failed with error 'EINVAL'(22) 

私はこのバグを見つけましたが、私の場合は問題を本当に理解できません。

答えて

1

スレッドコード(pthreads)を使用しているので、「時間がたつとクラッシュする」という意味があります。私はそれがC++コードを実行している疑いがあります。スウィフトコードはObjective-C++ラッパーコードを呼び出します。これはスレッドを生成するC++を呼び出し、その後あなたに戻って、後で何らかの形でデータを取得します。

私があなただったら、C++スレッディングコードを見てみましょう。関連性のあるStackoverflowの回答があります:EINVAL on pthread_mutexおそらくバグがあるかもしれません。あるいは、C++コードが失敗するのは、Linuxを想定していて、あなたがmacOSなどで動作しているからです。

私はこれを示唆することはほとんど嫌いですが、C++のサイズや複雑さによっては、おそらくSwiftで書き直すのが理にかなっています。あなたはこのコードを呼び出すために多くのブリッジ層を通過していますが、壊れやすいような感じがします(これはあなたが見ているものを説明するかもしれません)。

(OR別のヘルパーアプリとしてC++をコンパイルしてスウィフトプロセスにあなたのC++プロセスから前後に話をするXPCか、単にNSTaskのようなクロス通信を使用)

+1

あなたの答えをいただき、ありがとうございます。私が修正できるC++コードのバグでした。しかし、私はコンソールメッセージを理解していませんでした。 – JAB6240

関連する問題