ubuntu18-opencv3.4.6移植到aarch64

本文档详细介绍了如何在Ubuntu18上将OpenCV3.4.6移植到aarch64架构。首先,需要安装arm64交叉编译器和下载OpenCV源码。然后,通过cmake进行交叉编译配置,包括关闭CUDA支持、修改安装路径和链接器标志等。接着,修复源码中的几个BUG,并进行编译安装。最终,编译生成的libopencv_world.so库将被复制到目标板的/usr/lib目录下。

一、前提条件;
需先安装好arm64相关的交叉编译器;
安装好cmake-gui;
下载并解压opencv3.4.6
下载ippicv_2019_lnx_intel64_general_20180723.tgz
二、配置cmake
进入opencv3.4.6目录; cmake-gui并配置界面
步骤1:创建交叉编译方式在这里插入图片描述
步骤2:配置交叉编译环境在这里插入图片描述
步骤3:下方打印提示架构不支持不用管,Advanced勾选。
步骤4:修改下列配置
with_cuda确保关闭在这里插入图片描述
with_tiff去掉勾
在这里插入图片描述
CMAKE_INSTALL_PREFIX写入安装路劲在这里插入图片描述
CMAKE_EXE_LINKER_FLAGS写入 -lpthread -lrt -ldl添加编译环境变量
在这里插入图片描述
CMAKE_FIND_ROOT_PATH编译器路径:在交叉编译配置界面已经进行了配置,此处确认。
在这里插入图片描述
BUILD_opencv_world把所有编译后的.so库打包成一个库。
在这里插入图片描述
步骤5:点击Generate 生成cmake配置
三、修改源码几处BUG
1、vim 3rdparty/ippicv/ippicv.cmake 47行修改为ippicv_2019_lnx_intel64_general_20180723.tgz的保存路劲

"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
改为
"file:///XXXX/Download/opencv/"

2、vim 3rdparty/protobuf/src/google/protobuf/stubs/common.cc 45行 添加

#define HAVE_PTHREAD

3、vim build/CMakeCache.txt

CMAKE_CXX_FLAGS:STRING=-fpermissive

4、vim 3rdparty/libpng/pngpriv.h 130行

#  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
改为
#  if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

四、编译并安装

make -j4;make install;

进入到安装目录的lib下可以看到 libopencv_world.so
aarch64-himix100-linux-strip libopencv_world.so去掉多余空间
将libopencv_world.so 拷贝到板子上/usr/lib下。
五、编译环境
编译时Makefile中添加

OPENCV_DIR := /XXX/opencv_hisi_arm
...
CPPFLAGS := -lopencv_world -lrt -lpthread -ldl -lstdc++ -O3 -Wall -g -s
...
CPPDEFINC := -I$(OPENCV_DIR)/include
...
LIBCPPFLAGS := -L$(OPENCV_DIR)/lib
...

aarch64-himix100-linux-g++ $(LIBCPPFLAGS ) $(CPPFLAGS ) $(CPPDEFINC )  -o  app app.cpp
opencv2.4.4移植ARM 一、编译环境及库文件 linux环境:ubuntu 11.10 交叉编译4.6.1 opencv: opencv-2.4.4 cmake: cmake-2.8.1-Linux-i386.tar.gz 二、opencv-2.4.4移植过程 解压cmake-2.8.1-Linux-i386.tar.gz到/usr/local/ cmake-2.8.1 #export PATH= /usr/local/ cmake-2.8.1/bin:$PATH 用到的主要目录说明: 交叉编译工具链所在目录 /usr/local/arm-4.6.1/ 安装opencv的目录 /usr/local/ opencv源码所在目录 /usr/local /opencv-2.4.4 编译好的opencv库所在目录 /usr/local /opencv-2.4.4/build 默认安装目录为/usr/local #mkdir build #cd build #cmake-gui 选择源代码目录 /usr/local /opencv-2.4.4 选择Build目录 /usr/local /opencv-2.4.4/build 点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next, Operating System填写arm-linux C Compilers填写/usr/local/arm-4.6.1//bin/arm-none-linux-gnueabi-gcc C++ Compilers填写/usr/local/arm-4.6.1//bin/ arm-none-linux-gnueabi -g++ 程序库的Target Root填写/usr/local/arm-4.6.1/ 然后点击Finish,开始configure 点击Generate生成Makefile(等configure完之后按钮才能点击) #make 错误一: Linking CXX executable ../../bin/opencv_createsamples ../../lib/libopencv_core.so: undefined reference to `clock_gettime' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc' ../../lib/libopencv_core.so: undefined reference to `pthread_key_create 解决方法: 修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除 错误二: Linking CXX executable ../../bin/opencv_createsamples ../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy' ../../lib/libopencv_highgui.so: undefined reference to `TIFFOpen' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFfree' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp' ../../lib/libopencv_high
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值