Opencv3.4.14交叉编译AArch64-rk3399pro
Opencv3.4.14交叉编译AArch64(rk3399pro)
参考链接:https://blog.youkuaiyun.com/hunzhangzui9837/article/details/89846928
准备工作
环境:ubuntu18.04 64bit desktop (192.168.102.128)
开发板:rk3399pro
交叉编译工具:gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar
编译步骤:
1.安装cmake和cmake-gui
sudo apt-get install camke cmake-gui cmake-qt-gui
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libgtk2.0-dev libjpeg-dev libpng-dev libtiff-dev
2.配置交叉编译环境
sudo vim /etc/bash.bashrc
#set java env
export JAVA_HOME=/home/gaojun/devdisk/jdk1.8.0_281
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:$CLASSPATH
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
#set gcc env
export PATH=/home/gaojun/devdisk/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
3.编译opencv3.4.14
一)下载opencv3.4.14 官网地址:https://opencv.org/
二)解压进入该目录,新建build目录。
三)执行cmake-gui,配置选项。
- 选择opencv3.4.14的解压目录和build目录,如图:
第一处取名为Linux(区分大小写,错误5),不要取图上的名字,不然会出问题;
第二处为gcc交叉编译器;
第三处为g++交叉编译器;
第四处为交叉编译工具bin目录;
然后Finish,出现:
四)编译
在编译之前需要配置几项参数,避免报错。
1)修改build目录下的CMakeCache.txt
sudo vim CMakeCache.txt
在CMake_EXE_LINKER_FLAGS:STRING后面添加:-lpthread -lrt -ldl;如图:

执行:
sudo make
sudo make install
4.碰到的问题
错误1:
error: #error "No suitable threading library available."
#error "No suitable threading library available."
解决:
参考:https://blog.youkuaiyun.com/XHW___001/article/details/87377357
sudo gedit xx/xx/common.cc
添加:
#define HAVE_PTHREAD
错误2
can not be used when making a shared object; recompile with -fPIC
错误如图:
原因:
目前Linux OS系统会推出32位和64位两个不同的版本,由于32位程序和64位程序可能不兼容,因此如果在32bit OS环境下编译获得的库文件,移植入64bit环境时会产生Could not read symbols错误,一般是64 位 电脑才会出现。
参考:https://www.2cto.com/kf/201708/663543.html#
解决:
进入opencv目录下的3rdparty的对应目录CMakeFiles/ *.dir下,打开flags.make,在C_FLAGS = 后添加-O3 -fPIC用来支持在64位机上编译
如…/3rdparty/zlib/CMakeFiles/zlib.dir/flags.make
修改C_FLAGS =-W -Wall 为 C_FLAGS =-O3 -fPIC-W -Wall
和
修改CXX_FLAGS =-W -Wall 为 C_FLAGS =-O3 -fPIC-W -Wall
错误3
libopencv_imgcodecs.so:undefined reference to ‘png_init_filter_functions_neon’
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5narzTYG-1628133321899)(http://note.youdao.com/noteshare?id=f034bf242852800b68c8bf3434a2b958&sub=F5F3F802926C498FA4FE9CD40C62ABE6)]
解决:
修改
${HOME}/opencv-3.3.1/3rdparty/libpng/pngpriv.h
注释掉:
/*# if (defined(ARM_NEON) || defined(__ARM_NEON)) && */
修改为:
if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) && \
错误4(重要)
在编译时,始终不识别ant,如下图:
安装apache-ant-1.9.9
软链接 ln -s apache-ant-1.9.9/bin/ant /usr/bin/ant
软链接必须要做,否则无法识别ant。
直接安装ant,使用的是JDK11,导致运行出错。有时ant不识别,需要多刷几次。
错误5
libraries: …/…/lib/libopencv_features2d.so: cannot open shared object file: No such file or directory
解决:
Operating System 填写Linux (区分大小写)