2021-08-05

Opencv3.4.14交叉编译AArch64(rk3399pro)

参考链接:https://blog.csdn.net/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,配置选项。

  1. 选择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;如图:
 ![image](http://note.youdao.com/noteshare?id=7779019135633c4da5c230c99d9a3fda&sub=323CC667C6B3403291D1ACBFC4BB599F)
 

执行:

  sudo make
  sudo make install
4.碰到的问题
错误1:
error: #error "No suitable threading library available."
 
 #error "No suitable threading library available."
解决:

参考:https://blog.csdn.net/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 (区分大小写)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值