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

编译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数据结构![在这里插入图片描述](https://img-blog.csdnimg.cn/c64b40c2231a4ea39a95aac81d771bd1.pn…...

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构建了一套大规模高质量的音频文本数据收集方法&#xff0c…...

数据结构-----堆(完全二叉树)

目录 前言 一.堆 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进行处理,本文的案例是备选方…...

我以为会被本科成绩卡死,跨本申硕后结果HR根本不关心这个

我第一次找实习的时候,把成绩单反复看了很多遍。GPA不高。挂过课。Accounting 2 挂过一次。Corporate Finance 补考才过。Quantitative Methods 那门课,我甚至到现在还记得自己算错了多少题。我以为这些会成为问题。于是我在简历里尽量不写成绩。准备面试…...

07-opencode 代码分析与重构

07-代码分析与重构 掌握 OpenCode 的代码分析和重构功能,实现批量编辑、智能分析和代码库问答。 一、代码分析概述 1.1 分析能力 OpenCode 可以分析整个代码库,提供: 结构分析:模块依赖、调用关系质量分析:代码规范…...

嵌入式开发中的代码生成器设计与实践

1. 嵌入式代码生成器设计思路解析作为一名在嵌入式领域摸爬滚打多年的开发者,我深刻体会到重复编码带来的效率瓶颈。最近完成的一个代码生成器项目,让我从繁琐的相似代码编写中解放出来。这个工具的核心价值在于:它能自动生成那些结构固定但需…...

我需要开发出一个检测手机移动的算法来

1 用GPS2 运动传感器3 其他传感器就是真正能100%不会误报,而且精度达到:只要移动距离超过1米就要报警的那种。挂在树上面即使手机不停在转动也不会误报后来发现:只需要一个位移检测算法就可以了。...

收藏必备!小白程序员必看:如何用AI智能体操作系统赋能医疗行业?

本文介绍了一项创新性研究,旨在解决大语言模型智能体在医疗场景中的应用难题。传统AI智能体在医疗领域存在权限过大、记忆碎片化、沟通机制单一和医院IT系统死板等问题。为解决这些痛点,研究团队提出了医疗版“AI操作系统”(AOS-H&#xff09…...

cwalk:嵌入式C/C++轻量级路径处理库实战指南

1. cwalk:嵌入式系统中轻量级跨平台路径处理库的工程实践解析在嵌入式固件开发中,路径操作看似与裸机环境无关,实则在多个关键场景中不可或缺:Bootloader中从FAT32/SD卡加载固件镜像时需解析/firmware/v2.3.1/app.bin;…...

DRV2665压电触觉驱动芯片原理与嵌入式实现

1. DRV2665 驱动芯片技术解析:面向嵌入式系统的压电触觉反馈全栈实现 DRV2665 是德州仪器(TI)推出的一款高度集成的 IC 接口压电触觉驱动器,专为需要高保真、低功耗、小尺寸触觉反馈的便携式设备而设计。与传统基于电磁线圈&…...

2026届毕业生推荐的AI写作方案横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 专为削弱或消除文本里人工智能产成的具探测性特征而设的降AIGC工具,能使输出更贴…...

matlab anybody opensim包括人机耦合建模、缩放、运动学_逆动力学分析,以及自由度扩建、肌肉重建、RRA_CMC仿真,从理论到代码手把手教会运动生物力学数据代处理

matlab anybody opensim包括人机耦合建模、缩放、运动学/逆动力学分析,以及自由度扩建、肌肉重建、RRA/CMC仿真,从理论到代码手把手教会运动生物力学数据代处理、辅导 paper 包含运动学动力学分析,肌电数据处理由于 OpenSim 的核心算法&#…...

Aitoon arnold渲染器 卡通材质

Edge边,silhouette剪影只有两个跟普通材质不同,其他都跟普通材质一样Stylized highlight风格化高光;specular高光;rim lighting轮廓光transmission透射sheen光泽emission自发光【实例 卡通材质渲染边】打开edge requires contour …...