admin管理员组

文章数量:1640614

android studio error: cannot use ‘throw’ with exceptions disabled

最近遇到这样一个问题,在网上搜到原因是:
默认的情况下,Android Studio中是没有开启C++的标准异常,所以,会导致一下编译报错:cannot use ‘throw’ with exceptions disabled
百度到的解决方法都是:
在app-build.gradle中:android节点- defaultConfig - externalNativeBuild加入:cppFlags “-fexceptions”

 defaultConfig {
	    ……
        externalNativeBuild {
            cmake {
                cppFlags "-fexceptions"
            }
        }
        ……
    }

但是在我自己的项目里改后没有变化。因为我项目中用用到ncnn库,里面的4个abi目录下的lib/cmake/ncnn/ncnn.cmake,都有此行:

 INTERFACE_COMPILE_OPTIONS "-fno-rtti;-fno-exceptions" 

注释掉此行后解决了’throw’的问题。

========================================================================分割线
解决了上述问题后又产生了新问题:)
undefined reference to `typeinfo for ncnn::Layer’
查询原因是官方的 opencv 库是需要开启 rtti 的,这和目前 ncnn 的预编译包在使用自定义层时会不兼容。因为我的项目中用到了opencv库,也用到了自定义层。
解决方案:所以将上面4个abi目录下的lib/cmake/ncnn/ncnn.cmake里注释掉的那行改为

INTERFACE_COMPILE_OPTIONS "-fno-rtti;-fexceptions" 

;成功跑通。
参考链接:
1.https://codeleading/article/437996341/#:~:text=Android%20studio%20NDK%E7%AC%94%E8%AE%B02-%E9%94%99%E8%AF%AF%E6%80%BB%E7%BB%93%201.Error%3A%20cannot%20use%20%E2%80%98throw%E2%80%99%20with,with%20exceptions%20disabled%20%E8%A7%A3%E5%86%B3%EF%BC%9A%E5%9C%A8app-build.gradle%E4%B8%AD%EF%BC%9Aandroid%E8%8A%82%E7%82%B9-%20defaultConfig%20-%20externalNativeBuild%E5%8A%A0%E5%85%A5%3AcppFlags%20%E2%80%9C-fexceptions%E2%80%9D
2.https://github/benjaminwan/OcrLiteAndroidNcnn
3.https://github/Tencent/ncnn/issues/2694

本文标签: ErrorStudioandroiddisabledexceptions