Linux系统中交叉编译opencv库

news2024/10/6 6:03:58

目标:将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 cmake
	suod 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-dev
	sudo 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.coloradmin.cn/o/1886193.html

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

相关文章

论文学习——使用基于多项式拟合的预测算法求解动态多目标问题

论文题目:Solving dynamic multi-objective problems using polynomial fitting-based prediction algorithm 使用基于多项式拟合的预测算法求解动态多目标问题(Qingyang Zhang , Xiangyu He,Shengxiang Yang , Yongquan Dong , Hui Song , Shouyong Ji…

shopify后台设置为中文

shopify官网:https://link.juejin.cn/?targethttps%3A%2F%2Fshopify.dev%2F 1、点击右上角头像 2、选择个人资料 3、找到Language设置 开发者 1、创建开发商店 2、 3、点击左侧导航在线商店,点击右上角查看你的商店。在线商店链接为https://[商店名…

【FPGA 学习与实践】<初阶> 项目周计划

第1-2周:基础项目 - 4位加法器和计数器 目标:掌握Verilog基本语法和模块设计。 第1周: 学习Verilog的基本语法和结构(模块、端口、数据类型)。设计并实现一个4位加法器。编写测试平台(Testbench&#xff0…

38、shell之免交互

免交互 交互:我们发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应。 免交互:间接的,通过第三方的方式把指令传送给程序,不用直接的下达指令。 一、Here Document 免交互: 这…

谈谈在不同公司中的SAP职位

今天反客为主,聊一下这个HR的话题,考虑到SAP职位的专业性,感觉还是有必要谈一谈这个话题。最近跟几位HR的小伙伴聊了一下,讨论了下不同公司的SAP职位的招聘要求,感觉还是有那么几个存在的问题: 追求完美的…

goframe框架规范限制(but it should be named with “Res“ suffix like “XxxRes“)

背景: 首页公司最近要启动一个项目,公司主要业务是用java开发的,但是目前这个方向的项目,公司要求部署在主机上,就是普通的一台电脑上,电脑配置不详,还有经常开关机,所以用java面临…

Python实现万花筒效果:创造炫目的动态图案

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义绘制万花筒图案的函数主循环 完整代码 引言 万花筒效果通过反射和旋转图案创造出美丽的对称图案。在这篇博客中,我们将使用Python来实现一个动态的万花筒效果。通过利用Pygame库&#xf…

WebStorm配置路径别名(jsconfig.json)

项目是 ViteVueTs 新建一个 jsconfig.json文件 {"compilerOptions": {"baseUrl": ".","paths": {"/*": ["./src/*"]}},"exclude": ["node_modules", "dist"] }然后在 vite.confi…

LLM-Transformer:经典与前沿方法详解

LLM-Transformer:经典与前沿方法详解 前言 大规模语言模型(LLM)是当前自然语言处理(NLP)领域的核心技术,而Transformer架构作为LLM的基础,极大地推动了这一领域的发展。本文将详细介绍LLM-Tra…

网页计算器的实现

简介 该项目实现了一个功能完备、交互友好的网页计算器应用。只使用了 HTML、CSS 和 JavaScript ,用于检验web前端基础水平。 开发环境:Visual Studio Code开发工具:HTML5、CSS3、JavaScript实现效果 功能设计和模块划分 显示模块&#…

ASP.NETMVC-简单例子-数据库查询+razor使用+项目发布

环境: win10,SQL Server 2008 R2 参考: asp.net mvc框架之EF的使用 - black娃 - 博客园 https://www.cnblogs.com/fjiqiang/p/11131365.html 目录 数据库查询要求思路操作 razor使用项目发布要求实现 数据库查询 要求 从服务器的数据库中查…

独家专访|格行随身WiFi创始人——刘永先 格行随身wifi如何成为行业的领跑品牌?

随着移动互联网的普及和消费者对网络依赖性的增强,随身WiFi市场迎来了前所未有的发展机遇。然而,这一市场的迅速扩张也伴随着一系列问题,其中最为显著的就是市场乱象丛生。近日,有幸邀请到行业领跑品牌格行随身WiFi的刘总&#xf…

uboot 编译时传递参数实现条件编译

KCFLAGS make ARCHarm KCFLAGS-DENV_DEBUG CROSS_COMPILEaarch64-linux-gnu-env/sf.c env_sf_save 加入调试信息 # saveenv Saving Environment to SPI Flash... env_sf_save (1) spi_flash_erase (2) spi_flash_write is40000 Erasing SPI flash...Writing to SPI flash.…

JavaScript高级程序设计(第四版)--学习记录之对象、类和面向对象编程(中)

创建对象方式 工厂模式:用于抽象创建特定对象的过程。可以解决创建多个类似对象的问题,但没有解决对象标识问题。(即新创建的对象是什么类型) function createPerson(name, age, job) { let o new Object(); o.name name; o.age…

DSSAT作物模建模实践方法

随着数字农业和智慧农业的发展,基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。Decisi…

msvcp140_ATOMIC_WAIT.dll丢失的多种解决方法分享,实测有效

在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是“msvcp140_ATOMIC_WAIT.dll丢失”。那么,msvcp140_ATOMIC_WAIT.dll丢失是怎么回事呢?本文将从msvcp140_ATOMIC_WAIT.dll丢失的原因分析、对电脑的影响以及解决方…

linux 环境报错:Peer reports incompatible or unsupported protocol version

出现问题的原因: curl 不兼容或不支持的协议版本。 解决方案: yum update -y nss curl libcurl如此继续之前的操作即可。

【瞎折腾日常】服务器的cpu飙高到1000%了怎么破

一、故障起因 起因是用户反馈系统很卡,我登录普罗米修斯一看,发现docker部署得集群下的一个java应用服务器cpu爆了,直接冲到了1000%以上了,接着就是各种接口超时报警等,赶紧打开对应的服务器查看进程情况,这会使用jstack和top命令定位哪个线程占用的cpu比较大,定位代码问…

Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…

BMA530 运动传感器

型号简介 BMA530是博世(bosch-sensortec)的一款运动传感器。时尚简约的可穿戴设备为功能强大的组件提供了很小的空间。具有先进功能集的下一代加速度计是世界上最小的加速度传感器(1.2 x 0.8 x 0.55 mm)。它专为紧凑型设备而设计&…