首页 > 系统相关 >Linux系统中交叉编译opencv库

Linux系统中交叉编译opencv库

时间:2024-07-06 17:29:15浏览次数:28  
标签:编译 sudo apt opencv dev install Linux

目标:将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交叉编译完成。

标签:编译,sudo,apt,opencv,dev,install,Linux
From: https://blog.csdn.net/qianniulaoren/article/details/140129080

相关文章

  • 编译实践学习 Part8
    License:CCBY-NC-SA4.0lv8.1你可以把全局范围内所有的函数(包括之后章节中会出现的全局变量)都放在同一个作用域内,即全局作用域.于是我加入了Koopa_val_global_func.classKoopa_val_global_func:publicKoopa_val_base{private: FuncDefASTconst*func;p......
  • linux timezone
      packages/tzlocal/unix.py",line56,in_get_localzonewithopen(tzpath,'rb')astzfile:IsADirectoryError:[Errno21]Isadirectory:'/etc/timezone   检查/etc/timezone:确保/etc/timezone是一个文件,而不是一个目录。 ls-l/etc/tim......
  • MinGW GCC 5.3.0 编译OpenCV4.5.5 运行到imshow时崩溃
    Windows 下通过mingw32-make编译opencv4.5.5,经过一系列问题解决后发现其他正常,imshow崩溃.GCC版本太低原因,换更高版本的GCC解决.毕竟GCC5.3.0是2015年发行的,opencv4.5.5是2020年发行的尝试换GCC i686-8.1.0-release-posix-sjlj-rt_v6-rev0编译,调用imshow时正常运行,并且......
  • MinGW GCC 编译Glog0.6.0
     GCC版本: gccversion5.3.0(i686-posix-dwarf-rev0,BuiltbyMinGW-W64project)glog0.6.0地址: https://github.com/google/glog/tree/v0.6.0 编译很顺利,直接 然后进入C:/tmp/glog-0.6.0/Build2目录,执行命令: 编译完成后,在目录下存在libglog.dll和libglog.dll.a......
  • MinGW GCC Windows下编译libmodbus
    最近项目从MSVC切换到GCC,libmodbus官网没提供MinGW下GCC如何编译,官网推荐在类UNIX环境下MSYS下编译,个人更偏向直接拿源文件编译。编译libmodbus版本:libmodbus-3.1.10GCC编译器版本: 5.3.0(i686-posix-dwarf-rev0,BuiltbyMinGW-W64project)CMake版本: 3.29.0在随笔最......
  • mac os 迁移后,编译链接foundation的qt 项目失败
    error:unknowntypename'CFAttributedStringRef';didyoumean'NSAttributedStringKey'?CFAttributedStringRefattrString)CT_AVAILABLE(macos(10.5),ios(3.2),watchos(2.0),tvos(9.0));^/Library/Developer/CommandLineTools/SDKs/MacOSX1......
  • Linux容器篇-使用kubeadm搭建一个kubernetes集群
    kubernetes集群架构和组件master节点组件kube-apiserver:KubernetesAPI,集群的统一入口,各组件的协调者,以RESTfulAPI提供接口服务,所有对象资源的增删改查和监听操作都交给APIserver处理后再交给Etcd存储。kube-controller-manager:处理集群中的常规后台事务,一个资源对应......
  • Linux中的共享内存
    我们承担ROS,FastDDS等中间件以及C++,cmake等技术的项目开发和专业指导和培训,有10年+工作经验,质量有保证,如有需要请私信联系。Linux共享内存是一种进程间通信的方式,让不同的进程可以访问同一块内存区域。这样,一个进程可以直接读取或者修改另一进程的数据,避免了数据的复制,提高了......
  • Linux Samba 部署
            Samba是Linux下用于文件、打印机共享的开源软件套件,基于smb协议实现了Linux、Windows之间的打印机、文件共享,这里主要介绍常用的文件共享配置。     1、配置好yum源,安装好samb服务器、客户端软件包:    yuminstallsamba    yu......
  • 【Linux】:程序地址空间
    朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux程序地址空间的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!C语言专栏:C语言:从入门到精通数据结构专栏:数据结构个 人 主 页 :stackY、C++专栏  :C++Linux专 栏 ......