编译opencv-3.4.5 [交叉编译]
在unbuntu20.04环境下编译opencv3.4.5,
cmake 版本:3.27.4
gcc 版本:11.4.0
g++版本:11.4.0
在此环境下编译opencv4.5.4正常。
1. 编译时遇到的问题
(1)
Built target libprotobuf
make: *** [Makefile:163:all] 错误 2
make时用suod: sudo make -j4
(2)
[ 30%] Linking CXX static library ../../lib/libopencv_core.a
[ 30%] Built target opencv_core
make: *** [Makefile:166:all] 错误 2
解决方法: 通过联系不断的执行make命令
3.
make[2]: *** [3rdparty/openexr/CMakeFiles/IlmImf.dir/build.make:118:3rdparty/openexr/CMakeFiles/IlmImf.dir/IlmImf/ImfAcesFile.cpp.o] 错误 1
make[2]: *** [3rdparty/openexr/CMakeFiles/IlmImf.dir/build.make:146:3rdparty/openexr/CMakeFiles/IlmImf.dir/IlmImf/ImfB44Compressor.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:1797:3rdparty/openexr/CMakeFiles/IlmImf.dir/all] 错误 2
最后放弃在这个环境下编译这个opencv,因为考虑opencv3.4.5版本比较低,而这台电脑的cmake版本比较高,所以换了安装其他cmake低版本的电脑上编译。
2.换低版本cmake编译
vmware虚拟机上安装的ubuntu20上的环境为:
cmake版本为:3.16.3
gcc/g++: 9.4.0
3. 编译的opencv的.a库是基于x86的,因为并不是用交叉编译工具编译的。
参考:编译出错Relocations in generic ELF (EM: 62)_丁香树下丁香花开的博客-CSDN博客
编译成功了.a静态库, 但是把这些库添加进工程的编译配置后,又出现如下问题
通过objdump命令查看opencv的.a库文件格式, 很奇怪的是它是x86-64格式的
而同样的命令查看rk官方给的examples/3rdparty/opencv/opencv-linux-aarch64/中的库文件,发现格式是 elf64-little的,初步判断我编译的opencv库并不是用通过交叉编译得到的。
4.交叉编译工具编译opencv
opencv库可以直接在RK3566上进行编译,也可以选择在自己的Ubuntu上交叉编译opencv,然后在RK3566上调用编译好的库文件
参考:RK3588移植 opencv交叉编译_rk3588交叉编译opencv3.4.1_Bugger99的博客-CSDN博客
(1)下载交叉编译工具
这里下载: gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
Downloads | GNU-A Downloads – Arm Developer
下载后把它解压到一个指定的路径之下。后续编译的时候可以直接引用路径下的文件即可。
另一种方式是通过命令行来安装交叉编译工具:
#不指定版本安装gcc和g++交叉编译工具 sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu#指定安装最新的6.xx版本,应该是6.5.0,要安装中间小版本只能去下载编译器的压缩包 sudo apt install gcc-6-aarch64-linux-gnu g++-6-aarch64-linux-gnu
https://www.cnblogs.com/TaXueWuYun/p/15075015.html
(2)opencv下载
Releases - OpenCV
cd opencv-3.4.5
mkdir build && cd build
mkdir install
(3)安装好cmake, 我的cmake 版本是 3.16.3
(4)编译的gcc环境配置
>> vim ~/.bashrc
>>在最后添加
export PATH="/home/ws/linux-gcc/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH"
>>使环境变量生效 : source ~/.bashrc
>>验证gcc: aarch64-none-linux-gnu-gcc -v
(5) 编译
进入build路径下:
键入:
cmake ../
-D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/home/wm/Downloads/opencv-3.4.5/build/install #安装路径,默认/usr/local
-D BUILD_SHARED_LIBS=OFF #.a静态库
-D SOFTFP=ON #aarch64结构???
-D CMAKE_CXX_COMPILER=aarch64-none-linux-gnu-g++ #交叉编译工具
-D CMAKE_C_COMPILER=aarch64-none-linux-gnu-gcc #交叉编译工具
-D CMAKE_SYSTEM_NAME=Linux #目标系统名称
自己操作过程中,如果没有加最后一项,make到30%进度,即一直不能顺利进行,出现乱七八糟的各种问题。
加上后-D CMAKE_SYSTEM_NAME=Linux ,有可能在make过程中产生类似如下的错误:
arm平台交叉编译opencv出现 undefined reference to `png_init_filter_functions_neon'
解决方法是:
找到3rdparty/libpng/CMakeLists.txt
在最上面加上
SET(ARM 1)
SET(ENABLE_NEON 1)
重新cmake && make ,然后成功(make过程中可能断掉,但没提示错误,多重新make几次即可)
相关文章:

编译opencv-3.4.5 [交叉编译]
在unbuntu20.04环境下编译opencv3.4.5, cmake 版本:3.27.4 gcc 版本:11.4.0 g版本:11.4.0 在此环境下编译opencv4.5.4正常。 1. 编译时遇到的问题 (1) Built target libprotobuf make: *** [Makefile:163…...

Canal 实现MySQL与Elasticsearch7数据同步
1 工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump协议 MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal ) canal 解析 binary log 对象(原始为 byte 流) 优点&…...

网络安全攻防对抗之隐藏通信隧道技术整理
完成内网信息收集工作后,渗透测试人员需要判断流量是否出得去、进得来。隐藏通信隧道技术常用于在访问受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的数据传输。 一、隐藏通信隧道基础知识 (一)隐藏通信隧道概述 一般的网络通…...
读书笔记:多Transformer的双向编码器表示法(Bert)-2
多Transformer的双向编码器表示法 Bidirectional Encoder Representations from Transformers,即Bert; 第2章 了解Bert模型(掩码语言模型构建和下句预测) 文本嵌入模型Bert,在许多自然语言处理任务上表现优秀&#…...

Python 基于PyCharm断点调试
视频版教程 Python3零基础7天入门实战视频教程 PyCharm Debug(断点调试)可以帮助开发者在代码运行时进行实时的调试和错误排查,提高代码开发效率和代码质量。 准备一段代码 def add(num1, num2):return num1 num2if __name__ __main__:f…...

spring security auth2.0实现
OAuth 2.0 的认证/授权流程 jwt只是认证中的一步 4中角色 资源拥有者(resource owner)、客户端(client 第三方)、授权服务器(authorization server)和资源服务器(resource server)。…...
MySQL(6)LOCK和MVCC
一、锁的分类 按照锁的属性:读锁、写锁、共享锁、排它锁、悲观锁、乐观锁 按照锁的范围:表锁、页锁、间隙锁、临键锁、行锁 按照锁的作用:意向锁、意向共享锁、意向排它锁、IS锁、IX锁 二、MySQL为什么要有锁 锁是计算机协调多个进程或线程并…...

最新IDE流行度最新排名(每月更新)
2023年09月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧,Top IDE索引可以帮助您决定在软件开发项目中使用哪个IDE …...

I2C的上拉电阻如何计算?
说明: 1、本文只说明I2C上拉电阻的最小值如何计算。 2、I2C最小值和最大值计算的详细原理可以参考这篇文章:https://mp.weixin.qq.com/s/ZvJJ0rPRd_STULj8g1H81A。 3、I2C最小值的计算方式比较简单,在实际应用中计算出最小值,然后…...
Centos下安装 oracle11g 博客2
[oraclewangmengyuan database]$ ./runInstaller -silent -responseFile /home/oracle/database/response/db_install.rsp -ignorePrereq ./runInstaller -silent -responseFile /home/oracle/database/response/db_install.rsp -ignorePrereq 正在启动 Oracle Universal Insta…...

记一次逆向某医院挂号软件的经历
背景 最近家里娃需要挂专家号的儿保,奈何专家号实在过于抢手,身为程序员的我也没有其他的社会资源渠道可以去弄个号,只能发挥自己的技术力量来解决这个问题了。 出师不利 首先把应用安装到我已经 Root 过的 Pixel 3 上面,点击应…...

Canal实现Mysql数据同步至Redis、Elasticsearch
文章目录 1.Canal简介1.1 MySQL主备复制原理1.2 canal工作原理 2.开启MySQL Binlog3.安装Canal3.1 下载Canal3.2 修改配置文件3.3 启动和关闭 4.SpringCloud集成Canal4.1 Canal数据结构
Kafka的消息传递保证和一致性
前言 通过前面的文章,相信大家对Kafka有了一定的了解了,那接下来问题就来了,Kafka既然作为一个分布式的消息队列系统,那它会不会出现消息丢失或者重复消费的情况呢?今天咱们就来一探。 实现机制 Kafka采用了一系列机…...
Docker 部署 Firefly III 服务
拉取最新版本的 Firefly III 镜像: $ sudo docker pull fireflyiii/core:latest在本地预先创建好 upload 和 export 目录, 用于映射 Firefly III 容器内的 /var/www/html/storage/upload 和 /var/www/html/storage/export 目录。 使用以下命令来运行 Firefly III …...

配置OSPFv3基本功能 华为笔记
1.1 实验介绍 1.1.1 关于本实验 OSPF协议是为IP协议提供路由功能的路由协议。OSPFv2(OSPF版本2)是支持IPv4的路由协议,为了让OSPF协议支持IPv6,技术人员开发了OSPFv3(OSPF版本3)。 无论是OSPFv2还是OSPFv…...

【AI视野·今日Sound 声学论文速览 第九期】Thu, 21 Sep 2023
AI视野今日CS.Sound 声学论文速览 Thu, 21 Sep 2023 Totally 1 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚Auto-ACD,大规模文本-音频数据集自动生成方法。 基于现有的大模型和api构建了一套大规模高质量的音频文本数据收集方法,…...

数据结构-----堆(完全二叉树)
目录 前言 一.堆 1.堆的概念 2.堆的存储方式 二.堆的操作方法 1.堆的结构体表示 2.数字交换接口函数 3.向上调整(难点) 4.向下调整(难点) 5.创建堆 6.堆的插入 7.判断空 8.堆的删除 9.获取堆的根(顶)元素 10.堆的遍历…...

set/multiset容器、map容器
目录 set/multiset容器 set基本概念 set大小和交换 set插入和删除 查找和统计 set和multiset的区别 改变set排序规则 set存放内置数据类型 set存放自定义数据类型 pair队组 map容器 map容器的基本概念 map构造和赋值 map大小和交换 map插入和删除 map查找和统计…...
Linux系统编程——总结初识Linux(常用命令、特点、常见操作系统)
文章目录 UNIX操作系统(了解)Linux操作系统主要特征Linux和unix的区别和联系什么是操作系统常见的操作系统Ubuntu操作系统Ubuntu安装linux下的目录的类型(掌握)shell指令shell指令的格式文件操作相关指令系统相关命令网络相关命令其他命令软件安装相关的…...
Js使用ffmpeg进行视频剪辑和画面截取
ffmpeg 使用场景是需要在web端进行视频的裁剪,包括使用 在线视频url 或 本地视频文件 的裁剪,以及对视频内容的截取等功能。 前端进行视频操作可能会导致性能下降,最好通过后端使用java,c进行处理,本文的案例是备选方…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...

RabbitMQ 各类交换机
为什么要用交换机? 交换机用来路由消息。如果直发队列,这个消息就被处理消失了,那别的队列也需要这个消息怎么办?那就要用到交换机 交换机类型 1,fanout:广播 特点 广播所有消息:将消息…...