ubuntu ARM下OpenCV的交叉编译

需求

最近开始用xilinx zcu102,需要将OpenCV部署进去

环境及工具

编译环境:Ubuntu16.04
交叉编译工具链: gcc-linaro-6.4.1-2017.08-x86_64_aarch64-linux-gnu
(可修改为与petalinux相同版本的gnu工具)
OpenCV源码:用的是opencv-3.4.3
若未安装cmake及cmake-gui编译工具,执行:

sudo apt install cmake
sudo apt install cmake-qt-gui

其他依赖库:

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libtiff4-dev libswscale-dev libjasper-dev

利用cmake-gui进行相关配置

1.cmake-gui界面配置opencv,并生成Makefile

任意目录下进入cmake-gui界面:

source code源码:选择解压出来的opencv目录
build the binaries编译目录:自行创建一个build目录
path setting

2.配置生成目标选项

点击configure,配置如下图
配置两项:Unix Makefile、Specify options for cross-compiling
点击next
cross-compile option

3.配置编译器

配置如下图:
Operating System操作系统:arm-linux
编译器 C:选择交叉编译器的gcc,如 aarch64-linux-gnu-gcc
编译器 C++:选择交叉编译器的g++,如aarch64-linux-gnu-g++
Target Root:选择交叉编译器的bin目录
完成,点击 Finish
compile toolsets

4.指定编译内容/路径等配置

勾上 BUILD_JPEG 和 BUILD_PNG (此2项可选)
pic format取消掉WITH_OPENCL和OPENCV_DNN_OPENCL,否则会出现cl相关问题
openclopencl配置安装目录
默认是/usr/local,自行创建一个目录,如/usr/local/arm/opencv-arm1
install directory

5.执行配置,生成Makefile

配置完成,再次点击Configure,点击Generate
generate makefile

编译/安装opencv

1.查看是否已经生成Makefile

进入编译目录(即前面配置的“build the binaries编译目录”),可看到刚刚生成的Makefile文件:
makefile

2.执行编译

make

3.错误及解决:

错误1:没有连接到pthread库和dl库
…/…/lib/libopencv_core.so: undefined reference to pthread_mutexattr_destroy' ../../lib/libopencv_core.so: undefined reference topthread_create’
…/…/lib/libopencv_core.so: undefined reference to dlopen' ../../lib/libopencv_core.so: undefined reference topthread_mutex_trylock’
…/…/lib/libopencv_core.so: undefined reference to clock_gettime' ../../lib/libopencv_core.so: undefined reference todlsym’
…/…/lib/libopencv_core.so: undefined reference to pthread_mutexattr_settype' ../../lib/libopencv_core.so: undefined reference topthread_join’
…/…/lib/libopencv_core.so: undefined reference to `pthread_mutexattr_init’
解决方法
修改编译目录下的 CMakeCache.txt 文件:
找到 CMAKE_EE_LINKER_FLAGS:STRING 项:
//Flags used by the linker.
CMAKE_EXE_LINKER_FLAGS:STRING=’ ’
修改成以下:
//Flags used by the linker.
CMAKE_EXE_LINKER_FLAGS:STRING= -pthread -lrt -ldl
@注:网上有些人写-lpthread 是错误的

错误2:protobuf相关问题
若用不到opencv 中的DNN深度学习相关功能,protobuf此处可暂时关掉,粗暴有效(我用过几天用opencv加载caffemodel及prototxt做推理,但后续没有继续,故此处不做详细说明)
protobuf解决方法:
修改编译目录下的CMakeCache.txt文件:
找到BUILD_PROTOBUF:BOOL= 项:
//Force to build libprotobuf from sources
BUILD_PROTOBUF:BOOL=ON
修改成以下:
//Force to build libprotobuf from sources
BUILD_PROTOBUF: BOOL=OFF

错误3:
png init filter解决方法:在以下文件最顶端添加两行
aarch64修改完成,再次cmake

4.安装

make install

安装好的库目录下有这几个文件夹:
bin include lib LICENSE pkgconfig share
其中lib下是我们想要的要移植到开发板上的库(动态库,亦可配置编译静态库)
lib
以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值