当前位置: 首页 > news >正文

交叉编译opencv(Cpp)于arm64架构开发板上

适用于开发板离线+极简系统;

采用外部主机交叉编译+传输的思路

1.工具与环境需求

交叉编译工具,如aarch64-linux-gnu-gcc/g++

cmake基础编译工具

sudo apt install aarch64-linux-gnu-gcc aarch64-linux-gnu-g++ cmake

2.下载源码

进入工作目录;

git clone opencv的库到本地,并选择相应版本

git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.8.0

克隆下来的东西都会放在当前目录的opencv目录下;

在当前目录,创建build、opencv-arm-install文件夹,用于存放编译与安装结果。

3.编译安装

同一目录下,新建一个工具链文件toolchain.cmake,写入内容:

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR aarch64)SET(CMAKE_SYSROOT /home/why/arm-sysroot)SET(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
SET(CMAKE_FIND_ROOT_PATH  /home/why/arm-sysroot)SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

注意:根据主机具体位置修改

CMAKE_SYSROOT 环境变量为交叉编译工具链的系统文件,包括了工具链的头文件库文件。

可以通过开发板现有的arm架构库拷贝;或者自主编译构造;

自主编译可见: 于离线OpenEuler系统开发板上安装g++/gcc及各类基础库-CSDN博客

CMAKE_C_COMPILER 环境变量为交叉编译工具链的位置

可以通过which查询

进入编译目录,进行编译

cd buildcmake ../opencv \-DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/home/why/projects/opencv/opencv-arm-install \-DBUILD_SHARED_LIBS=ON \-DBUILD_TESTS=OFF \-DBUILD_PERF_TESTS=OFF \-DBUILD_EXAMPLES=OFF \-DWITH_TIFF=OFF \-DWITH_QT=OFF \-DWITH_GTK=OFF \-DWITH_OPENGL=OFF \-DWITH_V4L=OFF \-DWITH_JPEG=ON \-DWITH_PNG=ON \-DBUILD_opencv_python=OFF

注意修改DCMAKE_INSTALL_PREFIX 环境变量为我们刚刚创建的/opencv-arm-install目录

编译,安装(过程需要一定时间)

make -j$(nproc) 
make install

此时在我们创建的opencv-arm-install目录下,就可以找到编译出来的各个文件;

文件结构通常包括lib、include、bin等目录;

将整个opencv-arm-install打包,传输到开发板;解压到主目录下的usr/文件夹下,即可成功将opencv的各种库文件安装进开发板系统目录。

4.验证

在工作环境目录下创建新cpp文件:test_opencv

#include <opencv2/core/core.hpp>
#include <stdio.h>int main() {cv::Mat m(100, 100, CV_8UC1);printf("Matrix created: %dx%d\n", m.rows, m.cols);return 0;
}

终端设置变量环境并运行(自主修改参数)

aarch64-linux-gnu-g++ test_opencv.cpp \--sysroot=/home/why/arm-sysroot \-I/home/why/projects/opencv/opencv-arm-install/include/opencv4 \-L/home/why/projects/opencv/opencv-arm-install/lib \-lopencv_core \-o test_opencv_arm \-Wl,-rpath-link=/home/why/projects/opencv/opencv-arm-install/lib

可以得到编译结果:test_opencv_arm 可执行文件;可以传输到开发板端,在具备opencv库的情况下成功运行。

http://www.xdnf.cn/news/1169011.html

相关文章:

  • .NET使用EPPlus导出EXCEL的接口中,文件流缺少文件名信息
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——1、导航编辑器界面(Navigating the editor UI)介绍
  • numpy库的基础知识(二)
  • 理解后端开发中的API设计原则
  • 达梦数据库表字段增加时报错[-2106]:无效的表或视图名,[-2116]:列[IS_REPEAT]已存在
  • [3-02-02].第04节:开发应用 - RequestMapping注解的属性2
  • 支付网关系统前后端鉴权方案
  • 网络原理 HTTP 和 HTTPS
  • 代码检测SonarQube+Git安装和规范
  • Uni-App:跨平台开发的终极解决方案
  • uniapp打开导航软件并定位到目标位置的实现
  • 当直播间告别“真人时代”:AI数字人重构商业新秩序
  • uni-calendar自定义签到打卡颜色
  • Apache Ignite 中的 SQL 模式(Schema)管理机制
  • 使用python中的pymysql库,并且转化为数组元组数据
  • adb的使用
  • Leetcode—692. 前K个高频单词【中等】(桶排序)
  • Linux的磁盘存储管理实操——(下一)——标准分区扩容
  • Ajax第一天
  • GoLand 部署第一个项目
  • 【Python】常见模块及其用法
  • 认识自我的机器人:麻省理工学院基于视觉的系统让机器了解自身机体
  • 【LeetCode 热题 100】46. 全排列——回溯
  • Windows 编程辅助技能:转到文档
  • Docker实战系列:使用Docker部署AI SSH客户端工具IntelliSSH
  • 2025年远程桌面软件深度评测:ToDesk、向日葵、TeamViewer全方位对比分析
  • Golang避免主协程退出方案
  • 期权分红怎么分的?
  • Thinkphp8使用Jwt生成与验证Token
  • Spring之【Bean工厂后置处理器】