编译kernel 中 app(踩坑记录1——RK3588编译OpenCV)
这两天有在板卡上跑代码的需求 ,拿到了一块RK3588CPU的板子 ,型号是HINLINK的HK88.
以后记录一下调试这个板子的问题 ,便于以后查看
0. 基本信息
板卡系统:ArmBian ,基于Ubuntu20.04
OpenCV版本:3.4.5
采用方法:交叉编译(先在自己PC上编译 ,再放到板卡上)
PC系统:VMware虚拟机 ,64位Ubuntu20.04本文的其他参考资料:
资料1
资料2
资料3
为什么采用交叉编译:
因为我这个板子没有无线网卡 ,有线网的条件有限 。按照其他人的说法 ,在板子上直接编译也是可行的 。
1. 步骤
1.0 安装Cmake
在PC端 ,首先安装cmake ,为了保险也装上gcc和g++ 。例如 ,可以这样安装Cmake:
sudo snap install cmake --classic除此之外 ,一定也要安装make:
sudo apt install make在板卡上也要安装Cmake
。如果板卡能上网,直接安装即可 。如果无法上网 ,还需要离线安装 。
首先下载Cmake:https://cmake.org/download/
然后选择Linux aarch64:下载后到板子的某目录下 ,解压:
tar -xvfz cmake-3.25.1-linux-aarch64.tar.gz为了方便,将解压后的文件夹重命名:
mv cmake-3.25.1-linux-aarch64 cmake解压后 ,在.bashrc中加入子目录中的bin作为环境变量:
export PATH="/home/wjp/cmake/bin:$PATH"随后激活并验证
source .bashrc cmake --version如果这样不成功 ,则参照https://www.cnblogs.com/rainbow-tan/p/14693323.html
1.1 下载
首先下载OpenCV ,网址:https://opencv.org/releases/
然后下载交叉编译工具链 ,我们是需要从x86_64到aarch64 ,因此选择gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu 。下载地址:https://developer.arm.com/downloads/-/gnu-a
1.2 解压OpenCV和交叉编译工具链
在PC上 ,将下载好的OpenCV压缩包进行解压 。其实放在哪个目录无所谓 ,假设在home下:
unzip opencv-3.4.5.zip随后进入解压后的文件夹 ,并新建build与install目录 。build用来存放cmake的中间文件 ,install用来存放安装文件 ,将来粘贴到板子上 。
cd opencv-3.4.5 mkdir build mkdir install同样 ,解压交叉编译工具链:
tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz之后将其bin子目录加入.bashrc:
export PATH="/home/wjp/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH"同样需要激活
source .bashrc1.3 编译OpenCV
首先启动cmake的gui界面:
cmake-guiWhere is the source code 选择OpenCV所在目录 ,Where to build the binaries选择OpenCV下的build文件夹:
之后点左下角的configure,进行如图配置:点击next ,然后如图配置:
点击finish ,成功后,在Search栏中搜索PREFIX, 选定安装目录到install文件夹下:
此外CMAKE_BUILD_TYPE设置成RELEASE ,其他的选项可以个性化配置 ,我就没有更改其他的 。再次点击configure ,点击generate 。
成功后 ,进入OpenCV的build目录 ,执行:
sudo make -j4j后面是进程数 ,不指定也可以。
在编译阶段肯定会报错 ,我遇到的错误有两个 ,第一个是:
解决方法:按照提示找到路径 ,即3rdpatry/carotene/hal/carotene/Cmakefiles/carotene_objs.dir ,找到里面的build.make和flags.make , 将里面的ipcp-unit-growth全部替换为ipa-cp-unit-growth 。
第二个是:
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
例如./opencv-3.4.5/3rdparty/libpng/pngstruct.h中的#include "zlib.h"改为
#include "../zlib/zlib.h成功后 执行
sudo make install1.4 将OpenCV移动到板卡上
上一步执行完毕后 ,install文件夹里应该就有东西了。我们只需要这个文件夹 ,但是不要直接复制粘贴 ,因为里面的一些so文件是不可以复制粘贴的 。为此 ,我们先把install打包:
tar -cvf install.tar install随后将install.tar放到板卡某路径下 ,例如/home/wjp, 并解压:
tar -xvf install.tar随后要做两处更改 ,一是在/etc/ld.so.conf中增加:
cd /etc sudo vim ld.so.conf末尾增加:
/home/wjp/install/lib然后在ld.so.conf.d中新建opencv.conf:
cd ld.so.conf.d sudo vim opencv.conf编写内容:
/home/wjp/install/lib1.5 测试
采用OpenCV提供的sample简单测试
cd ~/opencv-3.4.5/samples/cpp/example_cmake在里面的CMakeLists.txt加入OpenCVConfig.camke所在路径, 我的为/home/wjp/install/share/OpenCV
即在line11 find_package(Opencv REQUIRED)之后加上
set(OpenCV_DIR /home/wjp/install/share/OpenCV)随后执行
cmake . make ./opencv_example不报错即可
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!