因为项目需要编译opencv安卓动态库,应用于armv8-64平台,记录下编译过程。
一、交叉编译环境
- 系统:centos 8.1
- ndk
ndk版本:/home/atguigu/ex/android-ndk-r20b
ndk地址:https://developer.android.google.cn/ndk/downloads/index.html
#修改环境变量
sudo vim etc/profile
#etc/profile末尾
export NDKROOT=/home/atguigu/ex/android-ndk-r20b
export PATH=$NDKROOT:$PATH
#启用环境变量
source profile
- cmake安装
cmake:cmake version 3.18.6
具体详细见:
https://www.jianshu.com/p/fe902d61bcdb - ant安装
为了能打包生成.so需要ant,
sudo yum -y install ant
#配置/etc/profile
export ANT_HOME="/usr/share/ant" # do not add "bin" at the end of the path
export PATH="$ANT_HOME/bin:$PATH"
#启用环境变量
source profile
二.编译opencv
1.下载编译文件
#进入用户空间
cd ~
#创建文件夹
mkdir opencv_jar_build
cd opencv_jar_build
#下载opencv
wget https://github.com/opencv/opencv/archive/refs/tags/3.4.12.tar.gz
#解压opencv
tar -zxvf 3.4.12.tar.gz
rm *.gz
#下载opencv_contrib,并解压
wget https://github.com/opencv/opencv_contrib/archive/refs/tags/3.4.12.tar.gz
tar -zxvf 3.4.12.tar.gz
ls -l
drwxrwxr-x 14 atguigu atguigu 303 Mar 21 11:37 opencv-3.4.12
drwxrwxr-x 6 atguigu atguigu 176 Sep 29 05:29 opencv_contrib-3.4.12
2.创建编译脚本
命令过长,得用脚本
在opencv_jar_build下,即opencv-3.4.12同级别下
#创建.sh文件
touch build.sh
vim build.sh
#build.sh内容
rm -rf build
mkdir build
cd build
#-DCMAKE_INSTALL_PREFIX="/home/atguigu/opencv_jar_build/install" \
#注意cmake语法,=ON后面需要带英文空格,\表示换行,后面加换行到下一行
cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
-DCMAKE_TOOLCHAIN_FILE="${NDKROOT}/build/cmake/android.toolchain.cmake"\
-DANDROID_NDK="${NDKROOT}" \
-DANDROID_NATIVE_API_LEVEL=24 \
-DANDROID_ABI="arm64-v8a" \
-D WITH_CUDA=OFF \
-D WITH_MATLAB=OFF \
-DANDROID_STL=c++_static \
-DBUILD_ANDROID_PROJECTS=OFF \
-DBUILD_ANDROID_EXAMPLES=OFF \
-D BUILD_DOCS=OFF \
-DBUILD_OPENCV_JAVA=ON \
-DANT_EXECUTABLE=${ANT_HOME} \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-DOPENCV_EXTRA_MODULES_PATH="/home/atguigu/opencv_jar_build/opencv_contrib-3.4.12/modules/" \
-DCMAKE_INSTALL_PREFIX="/home/atguigu/opencv_jar_build/opencv-3.4.12" \
../opencv-3.4.12
#多线程编译
make -j8
#安装编译结果,这里会安装到/home/atguigu/opencv_jar_build/opencv-3.4.12/sdk下
make install
也用opencv4.5.1,加上ant试了n次都报错,去掉又可以,有点莫名奇妙
3.4.12可以
#目标结果
cd /home/atguigu/opencv_jar_build/opencv-3.4.12/sdk
tree -L 2
.
├── etc
│ ├── haarcascades
│ ├── lbpcascades
│ ├── licenses
│ ├── valgrind_3rdparty.supp
│ └── valgrind.supp
└── native
├── 3rdparty
├── jni
├── libs
└── staticlibs
staticlibs中有.so,jni中有include,这是android所需要的
网友评论