opencv jni Android 实例笔记

举报
风吹稻花香 发表于 2022/03/04 00:37:44 2022/03/04
【摘要】 看起来不错,c++调用的: opencv4版本,本机 NDKTest-master.zip GitHub - zyongLiu/NDKTest: android JNI Test,use OpenCV default ncnn opencv3 enet融合例子: https://github.com/watersi...

看起来不错,c++调用的:

opencv4版本,本机 NDKTest-master.zip

GitHub - zyongLiu/NDKTest: android JNI Test,use OpenCV default

ncnn opencv3 enet融合例子:

https://github.com/watersink/enet-as-linux

java_opencv4.so方式,还有.a方式调用,

迁移到自己的项目不成功

OpenCVDemo/app/src/main/libs/arm64-v8a at main · GenialSir/OpenCVDemo · GitHub

这个项目548m,sdk的方式提供

GitHub - sohyeong-dev/OpenCV-JNI-Example: OpenCV JNI Example

项目中有ncnn,加opencv编译报错了

NDK工程使用ncnn vulkan包提示需要frtti、fexceptions

这两天弄一个工程,是在安卓端部署ncnn with vulkan的项目

一般来说都会用到 try catch 或者 有些库需要用到typeid

一般的方法是在build.gradle里面加上


  
  1.       externalNativeBuild {
  2.             cmake {
  3.                 cppFlags '-std=c++11 -frtti -fexceptions'
  4.                 abiFilters "armeabi-v7a", "arm64-v8a"
  5.             }
  6.         }


这个网上很多我就不具体说了,但是我发现我的工程即使加了这个也还是用不了,一开始以为是自己的设置啥的有问题,后来发现只要cmake里加了ncnn就会出这个问题,因此我就认真的读了ncnn里的cmake文件一般路径为:

ncnn-xxxxxx-android-vulkan\arm64-v8a\lib\cmake\ncnn\ncnn.cmake
于是在大概57行的位置我发现了这个:


  
  1. set_target_properties(ncnn PROPERTIES
  2.   INTERFACE_COMPILE_OPTIONS "-fno-rtti;-fno-exceptions"
  3.   INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/ncnn"
  4.   INTERFACE_LINK_LIBRARIES "-fopenmp;-static-openmp;Threads::Threads;Vulkan::Vulkan;\$<LINK_ONLY:glslang>;\$<LINK_ONLY:SPIRV>;android;jnigraphics;log"
  5.   INTERFACE_POSITION_INDEPENDENT_CODE "ON"
  6. )


好的罪魁祸首就是他了,只要把-fno-rtti;-fno-exceptions 改成 -frtti;-fexceptions就可以了。

不过我得声明一下我也是个小白哈,具体这么改了之后对ncnn的运行性能有什么影响我没有测,如果有大佬知道更好的解决办法希望能告诉我一下,我实在是没有别的办法了

原文链接:https://blog.csdn.net/fiendwbc/article/details/118976134

这个改完之后,ncnn报错了:

CMakeFiles/yolov5ncnn.dir/yolov5ncnn_jni.cpp.o:yolov5ncnn_jni.cpp:typeinfo for YoloV5Focus: error: undefined reference to 'typeinfo for ncnn::Layer'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

 

无效方法:

六、修改app/build.gradle下, defaultConfig里面加入下面的代码

externalNativeBuild {
    cmake {
        arguments "-DANDROID_TOOLCHAIN=clang"
        cFlags "-fopenmp -O2 -fvisibility=hidden -fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math "
        cppFlags "-fopenmp -O2 -fvisibility=hidden -fvisibility-inlines-hidden -fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math "
        arguments "-DANDROID_STL=c++_shared", "-DANDROID_CPP_FEATURES=rtti exceptions"
        cppFlags ""
        cppFlags "-std=c++14"
        cppFlags "-frtti"
        cppFlags "-fexceptions"
    }
}

文章来源: blog.csdn.net,作者:AI视觉网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/123244291

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。