2016-11-27 121 views
0

我在用Swift編寫的項目中添加了一個C++文件。它只計算一些隨機數並且使用矢量數組。它的包裝器是用Objective-C編寫的。當我嘗試從cpp文件調用函數時,應用程序在一段時間後崩潰。但是有一個奇怪的行爲,因爲它在執行C++代碼時不會崩潰(它像我期望的那樣運行),但是當我加載導航控制器時。這與兩者都沒有任何關係。控制檯顯示這個:在Swift項目中使用C++文件

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

我googled這個錯誤,但我真的不明白我的情況這個問題。

回答

1

因爲你使用線程代碼 - pthreads - 「一段時間後崩潰」是有道理的。我懷疑它運行的是C++代碼:你的Swift代碼調用了一些Objective-C++包裝代碼,它調用了一些C++,它產生了一個線程,然後返回給你,並在稍後的時間獲得數據。

如果我是你,我會看看C++線程代碼。有一個Stackoverflow的答案可能在這裏相關:EINVAL on pthread_mutex。也許有一個錯誤,或者C++代碼因爲它假設Linux而且你在macOS上或其他東西而失敗。

我也幾乎討厭這個建議,但取決於C++的大小/複雜性,也許在Swift中重寫它是有意義的。你正在經歷很多橋接層來調用這個代碼,感覺它可能有點脆弱(這可能解釋你所看到的)。

(或編譯的C++作爲一個單獨的助手應用程序,並使用像XPC或只是NSTask交叉通信談談你的C++程序來回您的斯威夫特過程)

+1

非常感謝您的回答。這是我的C++代碼中的一個bug,我可以修復它。但我不明白控制檯消息。 – JAB6240

相關問題