源码编译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:

原文地址:https://www.cnblogs.com/yanghailin/p/12690756.html

时间: 2024-10-01 21:34:56

源码编译opencv的安卓Android库的相关文章

【原创】源码编译libevent-2.0.21-stable生成库文件说明

按照 README 中的说明,首先执行 configure 下面的输出信息是针对源码编译所在机器进行的检测 [[email protected] libevent-2.0.21-stable]# ./configure checking for a BSD-compatible install... /usr/bin/install -c ... configure: creating ./config.status config.status: creating libevent.pc con

【Python笔记】如何源码编译依赖LAPACK和ATLAS库的NumPy包

上篇笔记介绍了不依赖lapack和atlas库的NumPy包源码编译/安装方法,但"纯净版"的NumPy会损失性能,故本篇笔记说明如何源码编译安装依赖lapack和atlas库的NumPy包. 1. GCC版本要求 使用较新版本的GCC工具集(尽量不低于v4.7)且集成有gfortran编译器. 备注1:这里大写的"GCC"是指GNU Compiler Collection,它除包含C语言编译器gcc外,还包含很多其它语言的编译器(如g++/gfortran等) 备

内核源码编译多余出来的lib库文件干啥用的

场景说明:从内核的官网下载2.6.32的内核源码,然后使用make menuconfig指令,配置内核,使用make module的过程中,会在/lib/module下生成2.6.32的文件夹 ,将某些驱动以模块的方式存在在这个目录下,但是很遗憾,机器上的内核版本是2.6.32.431,我非常好奇的就是这是啥门子的内核版本, 如何是好啊,所以在实际的目录下/lib/module下还有一个2.6.32.431的文件夹,很明显,如果这个时候生成,如果我执行make install指令,会产生什么惊天

源码编译LNMP环境

  一.环境准备: 1.部署LNMP架构需要安装依赖包 yum -y install make gcc gcc-c++ flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel gd freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2

源码编译安装Mysql5.7版本

1.源码编译安装mysql(5.7版本) 下载地址: https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz #(MySQL从5.7版本之后,boost是必须的,建议把系统自带的boost库卸载,源码编译安装高版本 Boost库是为C++语言标准库提供扩展的一些C++程序库的总称) (1)环境准备: [[email protected] ~]# ls mysql-boost-5.7.18.tar.gz  nginx

解决 Ubutnu16.04 + opencv4.1 源码编译错误 Makefile:160: recipe for target 'all' failed

最近源码编译 opencv,出现下面的错误 [ 60%] Built target opencv_dnn Makefile:160: recipe for target 'all' failed make: *** [all] Error 2 google 一下,才知道原来是安装了 Anaconda 后,python 和 gcc 都用的是 anaconda 的版本,anaconda 的 gcc 版本,比 system defalut 的版本低 参考:https://stackoverflow.c

Android源码编译jar包BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY的区别(二)

上文简单介绍了BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY编译出来jar包的区别, 那么你如果拿到了一个内容是dex格式的jar包,而你又偏偏需要这个jar包导入Eclipse来做开发, 手头偏偏又没有这个jar包的源码,或者有源码,但是没有Android源码编译(mm)的环境,怎么办? 这个时候谷歌安卓反编译工具(dex2jar, 本人实在太懒,就不提供下载链接了)就有用处了, 将jar包里面的dex文件(classes.dex)用此神器转换成一个

Android源码编译

Android源码编译学习小结 内容 系统源码编译 笔者之前在学习安卓系统源码的编译,为了能够印象深刻,粗略的总结了以下内容,希望对我一样的初学者有一些帮助. 系统编译的初始化指令 对android编译环境进行初始化很简单,分为两步.第一步打开终端输入source build/envseup.sh加载所需的文件. $ source build/envseup.sh including device/asusource build/envseup.shs/grouper/vendorsetup.s

OpenCV学习:OpenCV源码编译(vc9)

安装后的OpenCV程序下的build文件夹中,只找到了vc10.vc11和vc12三种编译版本的dll和lib文件,需要VS2010及以上的IDE版本,而没有我们常用的VS2008版本. 于是,需要的小伙伴们可以自己动手,丰衣足食! 1). 安装CMake cmake-2.8.8-win32-x86.exe (http://www.cmake.org/cmake/resources/software.html) 百度云盘:http://pan.baidu.com/s/1dEYbx77  密码: