• 源码编译opencv的安卓Android库


    因为项目需要,稍微改了opencv一点源码,这个时候就需要源码编译opencv的库了。我pc机器上面试了没有问题,但是我们项目是跑在移动设备安卓上面的,算法通过jni打包接口供上层java调用,opencv用的安卓版本的,这就坑爹了,没办法,我就编译安卓版本的opencv吧,这里面的坑真多。
    参考链接:
    https://www.jianshu.com/p/925614d6e9e0 OpenCV3.4源码交叉编译android库
    https://blog.csdn.net/Martin_chen2/article/details/80463610
    https://www.jianshu.com/p/288ca9327b32 源码编译Android openCV+openCV_contrib库

    //下面这个链接很重要,生成libopencv_java.so。
    https://blog.csdn.net/u010363893/article/details/54892448?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1

    //下面这个链接我按照他的来的,没有成功,报错。报错warning: /bin/ld: skipping incompatible,然后是找不到opencv库什么的
    https://www.cnblogs.com/gao-chun/p/4971126.html android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!

    我的环境是Ubuntu16.04
    首先是需要下载安装ndk
    ndk:android-ndk-14b

    cd /opt        ###/opt为android-ndk-r14b所在的目录,根据你对应的目录改变
    ./android-ndk-r14b/build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.9 --platform=android-21 --install-dir=./android-toolchain-r14b/android-armv7 --arch=arm --force
    

    上面这个路径随意。
    当然我整的时候各种问题,还有cmake版本过低的问题。还下了一个android-ndk-r21的。

    还有下面的指令,一开始明明加了参数ANDROID_ARCH_ABI=arm64-v8a,死活生成armeabi-v7a啊,然后去
    opencv-3.2.0/platforms/android/android.toolchain.cmake改这个,直接强制SET(ANDROID_ABI "arm64-v8a")

    #line638
    # choose target ABI
    __INIT_VARIABLE( ANDROID_ABI VALUES ${ANDROID_SUPPORTED_ABIS} )
    #####################################################YHL ADD yhl 20200409###########################################################
    SET(ANDROID_ABI "arm64-v8a")
    
    //0410-arm64可以 但是没有so
    export ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b
    cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DCMAKE_ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b -DANDROID_NATIVE_API_LEVEL=21 -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_JAVA=ON -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -D WITH_CUDA=OFF -D WITH_MATLAB=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/data_1/Yang/software/opencv-3.2.0/0myfile-android/install-now-1 ..
    
    

    然后敲

    make -j4
    make install -j4
    

    按照上面的这个命令,只有.a,没有libopencv_java3.so。因为一开始安卓用的只有libopencv_java3.so这个,官方下的库也是在OpenCV-android-sdk/sdk/native/libs/arm64-v8a文件夹下

    而我的,

    就是没有so
    然后同事告诉我

    //同事告诉我加 -DBUILD_SHARED_LIBS=ON             
    export ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b
    cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DCMAKE_ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b -DANDROID_NATIVE_API_LEVEL=21 -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_JAVA=ON -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -D WITH_CUDA=OFF -D WITH_MATLAB=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/data_1/Yang/software/opencv-3.2.0/0myfile-android/install-now-2 ..
    


    变成都是so了。。。
    但是总感觉这些已经能用了。然后无意间查资料发现,说
    ”PS:编译如果需要生成libopencv_java.so,需要安装ant工具,apt-get install ant 即可。通过修改CMakeCache.txt可以修改编译配置,里面有BUILD_OPENCV_JAVA,怎会产生libopencv_java.so。“
    然后我敲了:
    sudo apt-get install ant
    再加上 -DBUILD_OPENCV_JAVA=ON

    //0410-arm64可以 但是没有so  -DBUILD_OPENCV_JAVA=ON
    export ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b
    cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DCMAKE_ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b -DANDROID_NATIVE_API_LEVEL=21 -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_JAVA=ON -DBUILD_OPENCV_JAVA=ON -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -D WITH_CUDA=OFF -D WITH_MATLAB=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/data_1/Yang/software/opencv-3.2.0/0myfile-android/install-now-0413_0 ..
    

    哈哈,终于有了libopencv_java3.so:

  • 相关阅读:
    grep用法小结
    观察者模式
    类之间的关系
    Linux——makefile编写
    探索C++多态和实现机理
    进程间通信——管道
    C++继承引入的隐藏与重写
    Linux 文件读写操作与磁盘挂载
    xShell终端下中文乱码问题
    深入理解C++ new/delete, new []/delete[]动态内存管理
  • 原文地址:https://www.cnblogs.com/yanghailin/p/12690756.html
Copyright © 2020-2023  润新知