在RK3399 Android7.1环境下交叉编译安装opencv

一、前言

在负责的一个智能盒项目中,采用了RK3399处理器及Android7.1操作系统,由于项目中的图像处理需要用到opencv库,因此,需要将opencv库安装到开发环境中。我采用了下载opencv源码、交叉编译、再安装到Android7.1开发环境中的方法,在此过程中,遇到大量的编译、安装的问题,最终都一一解决。本文对安装步骤、问题的解决方法作一个总结和记录,以备忘。

二、opencv交叉编译步骤

1、下载源码:

从github.com/opencv/opencv/release上下载了3.4.2版本源码opencv-3.4.2.zip。在Ubantu的开发环境下,将zip源码解压到新建的目录中:

cd  ~/tof-project/opencv-3.4.2
unzip opencv-3.4.2.zip     //注意:zip文件解压不能用tar -z解压,因为zip文件是用zip软件压缩的,而 
                           //不是用gzip软件压缩的

源码解压后,在opencv-3.4.2目录下,有如下文件和目录:

3rdparty/  apps/  cmake/  data/  doc/  include/  modules/  platforms/ samples/  CMakeLists.txt  LICENSE  README.md  CONTRIBUTING.md

2、执行cmake:

cmake是一个跨平台的工具,用来对软件包进行配置、生成工程所需要的makefile系统。如果源码包的cmake与当前的开发环境不是原本就匹配好,那么,在执行cmake过程中大概率将会遇到不少问题,这些问题需要全部加以解决,才能使得opencv的源码交叉编译成功。可以说,camke能够正确执行、不出现错误,是整个交叉编译过程中最为关键的一步。

在解压后的文件夹opencv-3.4.2/platforms/android/下,有文件android.toolchain.cmake,其中有一些关于cmake的说明可以供解决问题时参考。

执行cmake的步骤如下:

在opencv-3.4.2下新建build目录,以便保存cmake过程中生成的文件:

mkdir build     
cd build

执行cmake命令,命令需要带如下参数:

cmake /home/lix/project/opencv-3.4.2 -DANDROID_NDK= /home/lix/project/rk3399_nougat-master/prebuilts/ndk/current           //指定android的NDK目录
-DCMAKE_INSTALL_PREFIX=$PWD/install//指定安装目录  
-DCMAKE_TOOLCHAIN_NAME=aarch64-linux-android-4.9     //指定gcc工具链
-DCMAKE_TOOLCHAIN_FILE=/home/lix/project/opencv3.4.2/platforms/android/ 
                 android.toolchain.cmake        //指定cmake的cmakelist文件
-DCMAKE_HOST_UNIX:BOOL=ON                 //指定host平台
-DBUILD_ANDROID_PROJECT:BOOL=OFF          //在进行makefile时不编译android工程
--trace &> 1.txt            //增加cmake的trace过程,并将结果记录到1.txt文件中以便查看

以上camke命令带的参数比较多,非常重要。可以说,这些参数的正确设置,是整个交叉编译过程得以成功的关键!为何带这些参数、这些参数的值如何设置,都是我在camke过程遇到了各种问题、并对问题进行了细致的分析后而得出来的。

特别值得指出的是:在camke中增加trace参数,就可以对camke执行命令进行跟踪,这对debug问题有很大帮助。可以通过命令:man cmake查看cmake命令可以带哪些参数。

3、对android.toolchain.cmake文件所作的修改,主要有:

L334:对进行“文件名匹配“的宏做了修改。

L493:set(ANDROID_NDK_TOOLCHAINS_PATH “${ANDORID_NDK}/../../ gcc/${ANDROID_NDK_HOST_SYSTEM_NAME}/aarch64”)  //这里,aarch64由原先的arm修改过来,因为我使用的编译器toolchain是arm 64位的,要根据其路径来设置。

4、cmake成功后,在opencv-3.4.2目录下生成了很多文件和目录,其中,最重要的生成了接下来要用的Makefile文件。

5、执行make,对opencv进行编译:

make
或者:
make -j8

这个过程大约需要十几分钟,make过程比较顺利,没有错误出现。结果是生成了许多opencv的.a库文件。

6、执行make install,生成安装目录。

make install

由于在cmake命令中指定了install路径,故在opencv-3.4.2/build/目录下,生成了install目录,进入install目录,可以看到生成了如下内容:

apk/  LICENSE  README.android  sdk/

opencv的库在sdk/native目录下面。

至此,就在Android7.1的开发环境中,成功地交叉编译生成了opencv的库文件,这些库文件就可以被其他程序调用、在RK3399单板上正确执行了。

你可能感兴趣的:(android,opencv,嵌入式)