这两天弄一个工程,是在安卓端部署ncnn with vulkan的项目
一般来说都会用到 try catch 或者 有些库需要用到typeid
一般的方法是在build.gradle里面加上
externalNativeBuild {
cmake {
cppFlags '-std=c++11 -frtti -fexceptions'
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
这个网上很多我就不具体说了,但是我发现我的工程即使加了这个也还是用不了,一开始以为是自己的设置啥的有问题,后来发现只要cmake里加了ncnn就会出这个问题,因此我就认真的读了ncnn里的cmake文件一般路径为:
ncnn-xxxxxx-android-vulkan\arm64-v8a\lib\cmake\ncnn\ncnn.cmake
于是在大概57行的位置我发现了这个:
set_target_properties(ncnn PROPERTIES
INTERFACE_COMPILE_OPTIONS "-fno-rtti;-fno-exceptions"
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/ncnn"
INTERFACE_LINK_LIBRARIES "-fopenmp;-static-openmp;Threads::Threads;Vulkan::Vulkan;\$<LINK_ONLY:glslang>;\$<LINK_ONLY:SPIRV>;android;jnigraphics;log"
INTERFACE_POSITION_INDEPENDENT_CODE "ON"
)
好的罪魁祸首就是他了,只要把-fno-rtti;-fno-exceptions 改成 -frtti;-fexceptions就可以了。
不过我得声明一下我也是个小白哈,具体这么改了之后对ncnn的运行性能有什么影响我没有测,如果有大佬知道更好的解决办法希望能告诉我一下,我实在是没有别的办法了