在 Swift 项目中使用 C++ 文件

Using C++ file in Swift Project

我已将一个 C++ 文件添加到我用 Swift 编写的项目中。它只计算一些随机数,也使用向量数组。它的包装器是用 Objective-C 编写的。当我尝试从 cpp 文件调用函数时,应用程序会在一段时间后崩溃。但是有一个奇怪的行为,因为它不会在执行 C++ 代码时崩溃(它像我期望的那样运行),而是在我加载导航控制器时崩溃。这与两者都没有任何关系。控制台显示:

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

我用谷歌搜索了这个错误,但我并不真正理解我的问题所在。

因为您使用的是线程代码 - pthreads - "crashes after some time" 是有道理的。我怀疑它是 运行 C++ 代码:你的 Swift 代码调用一些 Objective-C++ 包装器代码,它调用一些 C++,它产生一个线程,然后 returns 返回给你,你稍后会以某种方式获得数据。

如果我是你,我会查看 C++ 线程代码。有一个可能与此处相关的 Whosebug 答案:EINVAL on pthread_mutex。可能存在错误,或者 C++ 代码失败,因为它假定 Linux 并且您使用的是 macOS 或其他系统。

我也几乎不想提出这个建议,但是根据 C++ 的 size/complexity,在 Swift 中重写它也许是有意义的。您正在通过很多桥接层来调用此代码,感觉它可能有点脆弱(这可能解释了您所看到的)。

(或者将 C++ 编译为单独的帮助应用程序,并使用 XPC 或 NSTask 等交叉通信在 C++ 进程与 Swift 进程之间来回对话)