idea android jni cmake编译遇到的问题

编译ncnn库 zxing源码遇到的问题

error: cannot use ‘throw’ with exceptions disabled
throw IllegalArgumentException();
1 error generated.
[10/30] Building CXX object CMakeFiles/ncnnyolox.dir/zxing/DecodeHints.cpp.o
FAILED: CMakeFiles/ncnnyolox.dir/zxing/DecodeHints.cpp.o
^

zxing源码存在很多try catch这种异常处理,但是ndk默认并不支持,需要自己开启。
但是,在网上找到对应的处理方法并没有解决我的问题,仔细看具体的编译信息

...clang++.exe --target=i686-none-linux-android24 --gcc-
toolchain=ndk/22.1.7171670/toolchains/llvm/prebuilt/windows-x86_64 --
sysroot=ndk/22.1.7171670/toolchains/llvm/prebuilt/windows-x86_64/sysroot  -Dncnnyolox_EXPORTS -
IF:IDEA_code/zxing-jni-android/app/src/main/jni/include -
IF:IDEA_code/zxing-jni-android/app/src/main/jni/zxing -isystem 
IDEA_code/zxing-jni-android/app/src/main/jni/ncnn-20210720-android-
vulkan/x86/include/ncnn -isystem IDEA_code/zxing-jni-
android/app/src/main/jni/opencv-mobile-4.5.3-android/sdk/native/jni/include -g -DANDROID -fdata-
sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -
D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security  -frtti -fexceptions -O0 -fno-limit-debug-
info  -fPIC   -fno-rtti -fno-exceptions -std=gnu++11 -MD -MT 
CMakeFiles/ncnnyolox.dir/zxing/BitArray.cpp.o -MF CMakeFiles\ncnnyolox.dir\zxing\BitArray.cpp.o.d 
-o CMakeFiles/ncnnyolox.dir/zxing/BitArray.cpp.o -c 

发现 -frtti -fexceptions -O0 -fno-limit-debug-info -fPIC -fno-rtti -fno-exceptions -std=gnu++11 -MD -MT 在build.gradle中的修改其实已经生效,只是被后面的参数覆盖了,那么后面的参数从何而来呢,经过我多次尝试,发现是在ncnn库中声明的,在ncnn.cmake中
。具体位置:

ncnn-20210720-android-vulkan\arm64-v8a\lib\cmake\ncnn\ncnn.cmake
ncnn-20210720-android-vulkan\armeabi-v7a\lib\cmake\ncnn\ncnn.cmake
ncnn-20210720-android-vulkan\x86\lib\cmake\ncnn\ncnn.cmake
ncnn-20210720-android-vulkan\x86_64\lib\cmake\ncnn\ncnn.cmake

修改ncnn.cmake 中关于exceptions的定义

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

修改为

INTERFACE_COMPILE_OPTIONS "-fno-rtti;-fexceptions"

注意不要改-fno-rtti,不然也会报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值