ubuntu 20.04 aarch64 平台交叉编译 opencv

news2024/12/22 17:14:33

编译环境

  • win10 64 位

  • VMware Workstation Pro 16 虚拟机

  • 虚拟机安装 ubuntu 20.04

  • opencv 版本: 来自 github 当前最新 4.7

目的

  • 交叉编译 opencv,用于 嵌入式 aarch64 平台

下载 opencv

  • 可以直接从 github 下载 release 版本或者 使用 git clone 最新的 opencv 仓库

  • github opencv https://github.com/opencv/opencv

  • git clone https://github.com/opencv/opencv.git

编译的配置文件

  • 这里使用交叉编译工具链 aarch64-linux-musleabi-gcc,也可以使用 ARM 官方提供的 aarch64-linux-gnu-gcc

  • 配置文件:platforms/linux/aarch64-gnu.toolchain.cmake 复制一份,改为 platforms/linux/aarch64-musl.toolchain.cmake,当然也可以直接使用现有的

  • 修改 platforms/linux/aarch64-musl.toolchain.cmake 中交叉编译工具链的 名称:这里改为了 "aarch64-linux-musleabi"

set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(GNU_MACHINE "aarch64-linux-musleabi" CACHE STRING "GNU compiler triple")
include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")

配置交叉编译工具链

  • 下载并解压 aarch64 交叉编译工具链,然后配置 环境变量,这里修改 sudo vim /etc/profile 文件,在文件末尾增加 export PATH=$PATH:/home/zhangsz/linux/tools/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin,也就是把交叉编译工具链的路径 导出到环境变量

  • source /etc/profile 生效,可以输入 aarch64-linux-musleabi-gcc -v 确认 gcc 交叉编译工具链生效

在这里插入图片描述

编译 opencv

  • opencv 默认使用 cmake 进行配置,生成 动态库(so)的 操作步骤如下

  • 在 opencv 目录下,创建一个文件夹,如 build_so

  • cd build_so 进入 build_so 目录,然后执行cmake 配置命令:

cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-musl.toolchain.cmake .. -DCMAKE_CXX_FLAGS="-march=armv8-a" -DCMAKE_C_FLAGS="-march=armv8-a" -DBUILD_SHARED_LIBS=ON -DWITH_ADE=OFF

  • 注意 -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-musl.toolchain.cmake 表示 使用自己定义的 gcc 交叉编译配置文件

  • -DBUILD_SHARED_LIBS=ON 表示 生成 动态库 (so)

  • -DCMAKE_CXX_FLAGS="-march=armv8-a" -DCMAKE_C_FLAGS="-march=armv8-a" 可以指定生成的平台:armv8-a

  • 最后注意 cmake 执行路径,有个 ..,也就是上一级是 opencv 目录,当前在 opencv/build_so 目录下执行 cmake 命令

配置清单

  • 执行完 cmake 后,会生成 make 的清单,但还没有开始编译

在这里插入图片描述

  • 这里需要注意 交叉编译工具链的路径是否正确的识别到,如果没有识别到,注意重新设置 gcc 交叉编译工具链的环境变量

在这里插入图片描述

  • 如果没有配置 install 安装目录,默认会安装 在 build_so 目录下的 install 目录,注意如果是交叉编译的 opencv 库,不能安装到当前PC ubuntu 系统的路径下。因为 ubuntu 系统是 x86/64 平台的

make 开始编译

  • 输入 make 开始编译,可以多线程编译,如 make -j16 16线程编译,多线程需要根据当前电脑的硬件配置(CPU 核数)进行调整。

  • 虚拟机 ubuntu 编译,建议使用高性能电脑,虚拟机设置 8核 CPU 与 8GB以上内存。

在这里插入图片描述

  • 编译完成后, make install,这样 opencv 生成的库与头文件等,都会存放到 当前 build_so/install 目录下

查看产物

  • opencv 默认产物的路径: build_so/install
zhangsz@zhangsz:~/rtt/opencv/opencv/build_so/install$ ls
bin  include  lib  share

在这里插入图片描述

小结

  • opencv 可以通过 cmake 文件或者 cmake 命令,配置某些第三方软件包、特性的开启与关闭

  • opencv 如今不仅可以在 PC 平台使用,可以通过交叉编译,在嵌入式平台上使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『2023北京智源大会』6月9日上午|开幕式及全体大会

『2023北京智源大会』6月9日上午|开幕式及全体大会 文章目录 一. 黄铁军丨智源研究院院长1. 大语言模型2. 大语言模型评测体系FlagEval3. 大语言模型生态(软硬件)4. 三大路线通向 AGI(另外2条路径) 二. Towards Machines that can Learn, Reason, and Plan(杨立昆丨图灵奖得主…

Spring Boot整合JPA

文章目录 一、Spring Boot整合JPA(一)创建Spring Boot项目JPADemo(二)创建ORM实体类1、创建评论实体类 - Comment2、创建文章实体类 - Article (三)创建自定义JpaRepository接口 - ArticleRepository&#…

【Flutter】Flutter 中处理 loading 状态

文章目录 一、引言二、在 Flutter 中处理 loading 状态三、用具体业务逻辑代码示例展示四、常见问题及解决方案五、结语 一、引言 今天我们将一起探讨在 Flutter 中如何控制 loading 状态。 Flutter,作为一个高效、简洁的 UI 框架,已经在全球范围内得到…

FPGA基础知识-数据流建模

目录 学习目标 学习内容 1.门的类型 2.门延迟 学习时间 学习小结 学习目标 学习Verilog 提供的门级原语 理解门的实例引用、门的符号以及andor,bufnot类型的门的真值表 学习如何根据电路的逻辑图来生成verilog描述 讲述门级设计中的上升、下降和关断延迟 …

【MyBatis学习】MyBatis操纵数据库进行查询操作 ?MyBatis与JDBC想比怎么样,赶快与我一起探索吧 ! ! !

前言: 大家好,我是良辰丫,从今天开始我们就要进入MyBatis的学习了,请君与我一起操纵数据库,MyBatis到底是什么呢?我们慢慢往下瞧! ! !💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏:javaEE进阶篇之…

前端——自定义组件

目录 一、创作纪念日——6月7日(机缘巧合) 二、收获 三、前端组件 3.1、重要的CSS 3.2、实用组件 1、站点访问次数 2、鼠标样式 3、烟花点击特效 4、GIF动态小人(出现在左下角) 5、天气插件 6、音乐播放器 3.3、CSS组…

leetcode337. 打家劫舍 III(java)

打家劫舍 leetcode337. 打家劫舍 III题目描述 暴力递归解题思路代码演示 递归加缓存代码演示 动态规划专题 leetcode337. 打家劫舍 III 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/house-robber-iii 题目描述 小偷又…

湖南大学CS-2019期末考试解析

【特别注意】 答案来源于@wolf 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 有必要一做。 【试卷与答案】 一. 填空题(10 分,每空 2 分) 1. 0xb1e56f07 存放在采用小端存储的机器上,地址为 0x3287 到 0x328a ,则 0x3288 处存…

远程仓库拉不下来怎么办

因为项目需要做一个word转pdf的功能, 当我想要从阿里的仓库引入依赖时发现版本一直报错,无论怎么引入都爆红😭😭 *我将aspose的包先下载到本地,然后再安装安装到本地的maven仓库* mvn install:install-file -Dfile=C:\Users\Administrator\Downloads\aspose-words-18.…

Day01 项目简介分布式基础概念 -谷粒商城

最近在改进公司开发的商城项目,看到了尚硅谷的谷粒商城,就快速学习了下,因为之前的Kafka,Redis都是在这学习的,还有大数据的Flink。所以感觉一定不错,就开始了。 这里做一下学习笔记 一、项目简介 1 、项目背景 1 &…

一文看懂分布式存储 Ceph 架构原理

【摘要】本文带你层层深入Ceph的架构原理、读写原理,从而理解Ceph的特性及其应用场景。 1. 什么是Ceph? 首先,我们从 Ceph的官方网站上,可以看到:“Ceph is a unified, distributed storage system designed for exc…

第六章volatile详解

文章目录 volatile修饰的变量有2大特点volatile的内存语义 内存屏障是什么内存屏障分类粗分两种细分四种 什么叫保证有序性happens-before之volatile变量规则JMM就将内存屏障插入策略分为4种规则 volatile特性如何保证可见性说明例子volatile变量的读写过程 为何没有原子性例子…

软件测试“学历低”?10条人生逆袭建议

最近有粉丝私信问我“我学历低,投的简历屡屡石沉大海,不知道该怎么办?”之前也回答过其他人,今天把我的建议整理分享给大家。 学历是一块敲门砖,它会影响毕业以后的我们相当长一段时间,但并不是决定了我们…

fiddler抓包番外————了解工具栏

前言 作为一款功能强大的工具,Fiddler 提供了许多实用的功能和工具栏,可以帮助用户更加高效地使用它。 如果您想了解 Fiddler 的工具栏及其功能,那么本篇文章就是为您准备的。 在这里,我将为大家详细介绍 Fiddler 的工具栏及其…

Redis缓存预热、缓存穿透、缓存击穿、缓存雪崩,Redis布隆过滤器怎么实现?

目录 一、缓存预热1、缓存预热常见步骤2、代码实现 二、缓存雪崩1、什么情况会发生缓存雪崩?2、Redis缓存集群实现高可用3、如何避免Redis缓存雪崩? 三、缓存穿透1、什么情况会发生缓存穿透?2、如何避免Redis缓存穿透? 四、通过空…

Vue中如何实现轮播图、滑块选择器

Vue中如何进行滑动组件实现 在Vue应用中,滑动组件是一个常见的UI组件,例如轮播图、滑块选择器等等。本文将介绍如何使用Vue实现这些滑动组件。 轮播图 轮播图是一种常用的滑动组件,它通常用于展示多个图片或广告。在Vue中,我们可…

【人工智能里的数学】多元函数的微分学

【人工智能里的数学】多元函数的微分学 系列文章目录 【人工智能学习笔记】人工智能里的数学——概述 【人工智能里的数学】一元函数微分学 【人工智能里的数学】线性代数基础 【人工智能里的数学】多元函数微分学 文章目录 文章目录 系列文章目录文章目录偏导数高阶偏导数梯…

论文笔记--LIMA: Less Is More for Alignment

论文笔记--LIMA: Less Is More for Alignment 1. 文章简介2. 文章概括3 文章重点技术3.1 表面对齐假设(Superfacial Alignment Hypothesis)3.2 对齐数据3.3 训练 4 数值实验5. 文章亮点5. 原文传送门6. References 1. 文章简介 标题:LIMA: Less Is More for Alignm…

FTP协议分析(主动模式和被动模式)

今天本来计划分析下suricata中协议识别和解析的代码的,准备先从ftp协议开始看,不过看了一会儿代码后,还是觉得有必要对ftp协议的细节先熟悉熟悉。 目录 1、FTP环境搭建工具 2、FTP协议介绍 3、FTP文件操作命令列表 4、FTP请求码列表 5、…

硬件测试---相位噪声测试

一:相位噪声的概述 相位噪声是指信号或振荡器在频率上的相位变动或不稳定性。它是相对于理想稳定振荡器的相位偏离或波动的度量。相位噪声的存在意味着信号的相位在时间上会有微小的变化或扰动,这可能对某些应用产生负面影响。 相位噪声通常以相位噪声密…