繁体   English   中英

为什么在 Android 拥有的 C++ 源代码中无法捕获“OpenCV 的 CV_Error”?

[英]Why "OpenCV's CV_Error" isn't catchable in Android owned C++ sources?

我在一个 android 项目中使用 OpenCV(4.2.0)。 当从 android 项目的 C++ 文件调用一些 opencv 方法时,opencv 抛出CV_Error并且应用程序终止/崩溃。 我想处理异常并恢复程序,而不是崩溃。 无论如何要在项目的 C++ 文件中捕获这些异常吗? 我尝试了以下方法,但它不起作用。

try {
......

} catch (...) {

}

这是 crashlytics 的堆栈跟踪

这是 crashlytics 的堆栈跟踪

由于某种原因, CV_error #define CV_Error( code, msg ) cv::error( code, msg, CV_Func, __FILE__, __LINE__ )在 android 项目拥有的 C++ 文件中无法捕获。 我什至尝试了以下只是为了检查。 不执行 catch 块。

try {
    CV_Error(Error::StsBadArg, "Quadrangle is nonconvex or degenerated.");
} catch (...) {
    // not catched
}

如果其他人也遇到同样的问题,只需添加答案。

这个问题在某种程度上与项目中使用的ndkVersion有关。 ndkVersion升级到22.1.7171670后,在 android 项目中成功捕获了CV_Error异常。

因此解决方案是在应用程序的build.gradle文件中添加以下行。

ndkVersion '22.1.7171670'

android {
   defaultConfig {
      .......
      ndkVersion '22.1.7171670'
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM