Linux系统中交叉编译opencv库

目标:将opencv进行交叉编译,使其能在rk3326板子上运行使用。
环境:
ubuntu:18.04
opencv:4.5.4
opencv源码从挂网下载:opencv源码下载地址
交叉编译链:gcc-arm-10.3-linux-gun

一.环境准备

1.交叉编译链我配置在/opt/gcc-arm-10.3-linux-gun中,可根据实际情况自行配置目录;
2.opencv源码我下载后解压在家目录下的“software/opencv_linux/opencv-4.5.4”中;
3.下载“opencv_contrib-4.5.4”,下载这个是由于特定项目要用到,如果没有特殊要求,可以不用(后面会介绍这个contrib配置在哪)。
4.下载“boostdesc_bgm.i-main”,这个也是项目特定要求需要,如果没有特殊要求,可以不用。

二.依赖库安装

1.安装cmake,安装命令:

	suod apt-get install cmakesuod apt-get install cmake-qt-gui

2.安装依赖库,安装命令:

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install  libgtk-3-dev libtiff5-dev
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt install libopenexr-dev libwebp-dev
sudo apt-get install libcanberra-gtk-module

3.安装python环境,某些依赖库需要python环境,不然编译不过,安装命令:

	sudo apt install python3-devsudo apt install python3-numpy

4.将boostdesc_bgm.i-main 下的文件复制到“opencv_contrib/modules/xfeatures2d/src/” (前文环境准备中的第四步),此步骤为特定项目,解决下载慢问题,离线下载,如果没有特殊要求可以跳过此步骤;

三.配置make

1.执行命令打开cmake工具:

sudo cmake-gui

cmake配置
分别输入source code源代码路径和 build生成路径,然后点击“Configure”按钮。
在这里插入图片描述
选择第四个选项,进行自主配置:
注意,这里一定改设置你准备上板子的交叉编译链,别选错编译链,到时候调用出错,那就白编译了。
在这里插入图片描述
2.接下来就是配置cmake,
在这里插入图片描述
(1)勾选"Advanced";
(2)找到“CMAKE BUILD TYPE”,设置值为“Release”;
(3)找到“CMAKE EXE LINKER FLAGS”,设置值为“-pthread -ldl -rt”;
在这里插入图片描述
(4)找到“BUILD_ZLIB”并勾选;
在这里插入图片描述
(5)找到“CMAKE_INSTALL_PREFIX”,设置安装目录,我这里设置值为“/usr/local/opencv4.5.4”;
在这里插入图片描述
(6)找到“OPENCV_EXTRA_MODULES_PATH”,设置值为MODULES所在目录。注意:此步骤是本项目特定要求的,参见前文准备环境中的第三条,如果没有特定要求,跳过此步;
在这里插入图片描述
(7)点击“Configure”按钮重新配置,执行需要一段时间,静待状态栏提示“Configuring done”;
(8)再点击“Generate”按钮生成makefile文件,执行需要一段时间,静待状态栏提示“Generating done”;
在这里插入图片描述
至此,opencv源码包目录下的build文件夹中makefile文件已经生成,关闭cmake工具,可以准备make编译了。
在这里插入图片描述

四.make编译

1.进入到上文中的opencv中的build目录下,执行命令:

make -j4

2.编译过程中可能会出现多种报错
(1)如下“system Error:Permission denied”这是没有权限
在这里插入图片描述
改用“sudo make -j4”命令;
(2)遇到错误“错误: #error "No suitable threading library available.”
在这里插入图片描述
解决方法:在opencv源码路径下的“opencv-4.5.4/3rdparty/protobuf/src/google/protobuf/stubs/common.cc” 文件中的开始处,有很多包含的头文件,在此处添加这一行
#define HAVE_PTHREAD
在这里插入图片描述
(3)继续重新编译尝试,遇到错误如下:
在这里插入图片描述
这是交叉编译工具链有漏洞,按报错文件指向,在交叉编译工具链的目录下找到“features.h”,打开该头文件,在#if defined前面 加上这句
#define _FILE_OFFSET_BITS 64
在这里插入图片描述
(4)再次重新编译尝试,遇到报错:“undefinedreference to png do expand palette rgba8 neon”
在这里插入图片描述
解决办法:在opencv源码目录下找到“3rdparty/libpng/pngpriv.h”头文件,找到
#if (defined(ARM_NEON) || defined(__ARM_NEON)) &&
将其改为:
#if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) &&
在这里插入图片描述
以上,可能还会出现其他错误的话,就要根据报错信息网上查找解决。

3.编译完成
在这里插入图片描述
4.执行安装命令:
sudo make install
安装完成后,可以发现opecv编译好的so库已经在你指定的安装目录下了。我指定安装在“/usr/local/opencv4.5.4/”下,该目录下lib中就是opencv的各个so库。
在这里插入图片描述
至此,opencv交叉编译完成。

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

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

相关文章

CVPR 最佳学生论文,一键启动「BioCLIP 生物分类的层次预测 Demo」,帮你快速识别生物种类

很多生物由于外形的相似程度较高,难以使用肉眼进行区分。美国俄亥俄州立大学、微软研究院、加州大学欧文分校、伦斯勒理工学院共同发布了「BioCLlP: A Vision Foundation Model for the Tree of Life」, 基于 TREEOFLIFE-10M 这样的大规模标记数据集&…

【面试系列】AI研究员高频面试题及详细解答

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

HR人才测评,如何考察想象力?

什么是想象力? 想象力是指,人们通过在已有物质的基础上,通过大脑想象、加工、创造出新事物的能力,举一个非常简单的例子,在提到鸟这种生活的时候,大家会联想到各种各样不同鸟的品种。 在企业招聘中常常应…

WebStorm 2024 for Mac JavaScript前端开发工具

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文…

编写动态库

1.创建库.c .h文件 2.编写Makefile文件 3.make之后形成.so文件 4.make output,形成mylib 5.把mylib拷贝到test里面 mv mylib /test 6.编译 gcc main.c -I mylib/include -L mylib/lib -lmymethod形成a.out 但是直接执行会出现以下问题 很显然没有找到动态库 7.解决加载找不…

JDeveloper 12C 官网下载教程

首先、我们要登录Oracle官网 Oracle 甲骨文中国 | 云应用和云平台 登录进去如果不是中文可以点击右上角带有国旗的图标就行更改,选择一个你能看懂的文字。 然后,点击“资源”—点击“开发人员下载” 然后,点击“开发工具” 这里有很多工具可…

美团实习—后端开发凉经

面试经历分享 日期: 4月22日时长: 50分钟 意外之喜 没想到在面试过程中,我再次被选中进行下一轮,这确实让我感到有些意外和欣喜。这次面试经历对我而言,不仅是一次技能的检验,更是一次知…

简述设计模式-工厂模式

概述 工厂模式是为了提供创建对象的方式,无需制定要创建的具体类。 举个例子,假如我是甲方需要制造一辆车,我可以要油车,可以要电车,也可以油电混动车,如果没有工厂,我需要自己找到对应的制造…

可重入锁思想,设计MQ迁移方案

如果你的MQ消息要从Kafka切换到RocketMQ且不停机,怎么做?在让这个MQ消息调用第三方发奖接口,但无幂等字段又怎么处理?今天小傅哥就给大家分享一个关于MQ消息在这样的场景中的处理手段。 这是一种比较特例的场景,需要保…

数据质量管理-可访问性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档,当前数据质量评价指标框架中包含6评价指标,在实际的数据治理过程中,存在一个关联性指标。7个指标中存在4个定性指标,3个定量指标; 定性指标&am…

kaggle量化赛金牌方案(第七名解决方案)

获奖文章(第七名解决方案) 致谢 我要感谢 Optiver 和 Kaggle 组织了这次比赛。这个挑战提出了一个在金融市场时间序列预测领域中具有重大和复杂性的问题。 方法论 我的方法结合了 LightGBM 和神经网络模型,对神经网络进行了最少的特征工程。目标是结合这些模型以降低最终…

C语言编程-基于单链表实现贪吃蛇游戏

基于单链表实现贪吃蛇游戏 1.定义结构体参数 蛇行走的方向 蛇行走的状态 蛇身节点类 维护蛇的结构体型 2.游戏运行前预备工作 定位光标位置 游戏欢迎界面 绘制游戏地图(边界) 初始化游戏中的蛇身 创建食物 3.游戏运行 下一个位置是食物,就吃掉…

ArcGIS中将测绘数据投影坐标(平面坐标)转地理坐标(球面经纬度坐标)

目录 前言1.测绘数据预览1.1 确定带号1.2 为什么是对Y轴分带,而不是对X轴分带? 2 测绘数据转shp2.1 添加数据2.2 显示XY数据2.3 添加经纬度字段2.4 计算经纬度 3.shp数据重投影4.总结 前言 最近在刚好在做一个小功能,将测绘数据转为经纬度坐标…

浙江建筑安全员A证2024年最新考试题库练习

46.总承包单位依法将建设工程分包给其他单位的,分包合同中应当明确各自的安全生产方面的权利、义务。总承包单位对分包工程的安全生产承担()责任。 A.全部 B.主要 C.部分 D.连带 答案:D 47.实施总承报的建设工程发生事故&…

怎么压缩ppt文件大小?这四种压缩方法真的超级好用!

怎么压缩ppt文件大小?当我们精心打造PPT时,随着创意的涌动和内容的充实,常常会发现PPT文件的大小也在不知不觉间悄然膨胀,这背后其实隐藏着诸多因素,首先,我们可能过于追求视觉效果,不经意间在P…

【信息学奥赛】CSP-J/S初赛05 计算机原码、补码和反码

本专栏👉CSP-J/S初赛内容主要讲解信息学奥赛的初赛内容,包含计算机基础、初赛常考的C程序和算法以及数据结构,并收集了近年真题以作参考。 如果你想参加信息学奥赛,但之前没有太多C基础,请点击👉专栏&#…

线性代数大题细节。

4.4 方程组解的结构(二)_哔哩哔哩_bilibili

c++将一个复杂的结构体_保存成二进制文件并读取

在 C 中&#xff0c;可以将复杂的结构体保存到二进制文件中&#xff0c;并从二进制文件中读取它。为了实现这一点&#xff0c;你可以使用文件流库 <fstream>。以下是一个示例&#xff0c;展示如何将一个复杂的结构体保存到二进制文件中&#xff0c;并从二进制文件中读取它…

Docker在windows上使用vscode远程连接容器

目录 一、提前准备&#xff1a; 二、vscode连接docker容器 三、构建好的docker容器直接连接vscode 四、Windows下的可视化出linux的ui界面 在日常的开发中&#xff0c;不想windows和linux两个系统之间来回切换&#xff0c;笔者最近打算所有的环境均在一个系统上完成。为了交…

Nosql期末复习

mongodb基本常用命令&#xff08;只要掌握所有实验内容就没问题&#xff09; 上机必考&#xff0c;笔试试卷可能考&#xff1a; 1.1 数据库的操作 1.1.1 选择和创建数据库 &#xff08;1&#xff09;use dbname 如果数据库不存在则自动创建&#xff0c;例如&#xff0c;以下…