opencv源码交叉编译安卓库
因为项目需要编译opencv安卓动态库,应用于armv8-64平台,记录下编译过程。
一、交叉编译环境
系统:ubuntu16.04
ndk版本:android-toolchain-r14b(ndk下载地址,选对应版本)
cmake:3.6 camke命令安装,参考地址:https://www.cnblogs.com/wt645631686/p/6868487.html
openc源码下载地址:https://opencv.org/
二、编译流程
1、生成独立交叉编译工具连
在android-ndk-r14b所在目录执行如下命令生成独立交叉编译工具链 ./build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.9 --platform=android-21 --install-dir=./android-armv8 --arch=arm --force
--install-dir为生成的独立交叉编译工具链的安装目录 --force 加上这个选项会先移除安装目录下已经存在的工具
2、编译opencv动态库
export NDK_HOME=/your path/android-ndk-r14b export PATH=$NDK_HOME:$PATH export ANDROID_NDK=/you path/android-ndk-r14b
2.1 进入opencv源码的主目录
cd /your path/opencv_3.2.0
2.2 创建build的文件夹并进入
mkdir build cd build
2.3 安装依赖包:如果要编译生成libopencv_java.so文件,需要安装ant工具,并且cmake指定 -DBUILD_OPENCV_JAVA=ON
sudo apt-get install aut
2.4 cmake生成makefile文件
cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake 
      -DCMAKE_ANDROID_NDK=/your path/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 
      -DBUILD_OPENCV_JAVA=ON 
      -DCMAKE_INSTALL_PREFIX=/your path/opencv-3.2.0/install_r 
      .. 
cmake 命令中指定库的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} )
SET(ANDROID_ABI "arm64-v8a") 
cmake完成后如下图所示。值得注意的是stl支持的默认方式是gunstl_static。
2.5 编译并安装
make -j4 && make install
执行完之后,编译生成的库文件在/your path/opencv-3.2.0/install_r目录下
三、参考
//下面这个链接很重要,生成libopencv_java.so。 https://blog..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

