瑞芯微rk3588平台的开发板上编译opencv笔记
乐果 发表于 2024 年 01 月 03 日 标签:cc++arm
最近在公司开始研究边缘侧人脸识别能力,打算采用百度离线 sdk 植入集成方式,
之前倒腾穿透时买了orange-pi 5 plus开发板,
这下刚好与百度离线sdk的硬件要求(arm架构)匹配,于是就开始继续倒腾起来。
其中在预研人脸识别 sdk 的 demo 中需要用到 opencv 类库,故作此笔记。
下载源码与交叉编译工具
本人的开发pc机是 x86 架构 ubuntu 系统, 本笔记以此为例。
首先要在pc机上安装cmake,为了保险也装上 gcc 和 g++ 。例如,可以这样安装 Cmake :
sudo snap install cmake --classic
除此之外,一定也要安装 make :
sudo apt install make
下载源码
opencv源码: https://opencv.org/releases/page/3/
下载交叉编译工具
交叉编译工具: https://developer.arm.com/downloads/-/gnu-a
因为我们是需要从 x86_64 交叉编译到 aarch64,因此选择 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu

解压OpenCV和交叉编译工具链
在PC上,将下载好的OpenCV压缩包进行解压。其实放在哪个目录无所谓,假设在home下:
unzip opencv-4.1.2.zip
随后进入解压后的文件夹,并新建 build目录 和 /usr/local/opencv4.1.2 目录。build 用来存放 cmake 的中间文件,/usr/local/opencv4.1.2 用来存放安装文件,将来粘贴到板子上。
cd opencv-4.1.2
mkdir build
sudo mkdir -p /usr/local/opencv4.1.2
同样,解压交叉编译工具链:
tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
之后将其 bin子目录加入 .bashrc (因为我用了zsh , 所以我的是 .zshrc ):
export PATH="/home/xiao/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH"
同样需要激活
source .bashrc
# 或 source .zshrc
配置交叉编译
首先启动 cmake 的 gui 界面:
cmake-gui
Where is the source code 选择 OpenCV 所在目录, Where to build the binaries 选择 OpenCV 下的 build 文件夹:

之后点左下角的configure,进行如图配置:

点击next,然后如图配置:

点击 finish ,成功后,在 Search 栏中搜索 PREFIX , 选定安装到哪个目录(例如,将如下截图目录改成 /usr/local/opencv4.1.2 ):

此外CMAKE_BUILD_TYPE设置成RELEASE ,其他的选项可以个性化配置,我就没有更改其他的。
再次点击 configure ,点击generate 。
成功后,进入 OpenCV 的 build 目录,执行:
sudo make -j4
j后面是进程数,不指定也可以。
在编译阶段肯定会报错,我遇到的错误有两个,第一个是:

解决方法:按照提示找到路径,即 3rdpatry/carotene/hal/carotene/Cmakefiles/carotene_objs.dir ,找到里面的 build.make 和 flags.make , 将里面的 ipcp-unit-growth 全部替换为 ipa-cp-unit-growth 。
vim 3rdparty/carotene/hal/carotene/CMakeFiles/carotene_objs.dir/build.make
# 搜索替换:%s/ipcp-unit-growth/ipa-cp-unit-growth/g
vim 3rdparty/carotene/hal/carotene/CMakeFiles/carotene_objs.dir/flags.make
# 搜索替换:%s/ipcp-unit-growth/ipa-cp-unit-growth/g
第二个是:
fetal error : no such file or dictionary: zlib.h
是报找不到 zlib.h 头文件的错误。一开始我去zlib的官网安装 zlib,但是没有用,解决的方法是:不要用外部的 zlib,直接用 OpenCV 目录里的 zlib ,即 ./opencv-3.4.5/3rdparty/zlib/zlib.h
于是,哪个文件报找不到 zlib.h ,就直接更改 include 即可 . 即:
将报错行的 #include <zlib.h> 或 #include "zlib.h" 改成相对路径,让它引用到 ./opencv-3.4.5/3rdparty/zlib/zlib.h :
例如 ./opencv-3.4.5/3rdparty/libpng/pngstruct.h 中的 #include "zlib.h" 改为 #include "../zlib/zlib.h"
make 成功后 执行:
sudo make install
将OpenCV移动到板卡上
上一步执行完毕后,install文件夹里应该就有东西了。我们只需要这个文件夹,但是不要直接复制粘贴,因为里面的一些so文件是不可以复制粘贴的。为此,我们先把install打包:
tar -czvf opencv4.1.2.tar.gz /usr/local/opencv4.1.2
随后将 opencv4.1.2.tar.gz 放到板卡某路径下,例如 /usr/local, 并解压:
tar -xvf opencv4.1.2.tar.gz
随后要做两处更改,一是在 /etc/ld.so.conf 中增加:
cd /etc
sudo vim ld.so.conf
末尾增加:
/usr/local/opencv4.1.2/lib
然后在 ld.so.conf.d 中新建 opencv.conf :
cd ld.so.conf.d
sudo vim opencv.conf
编写内容:
/usr/local/opencv4.1.2/lib