ubuntu22.04编译安装opencv2遇到的错误

Ubuntu22.04系统安装opencv步骤简述及问题解决方法 opencv是一个功能强大、开源且跨平台的计算机视觉库,适用于多种编程语言和操作系统,能够帮助开发者构建各种视觉项目。其模块众多,提供了诸多功能,能够进行图像处理、视频处理等等。比如:Highgui模块提供图像用户界面和视频I/O功能;Video模块专门用于视频分析;Photo模块提供了计算摄影功能。opencv能够在Linux系统中使用,于是我在电脑中利用虚拟机来实现安装和使用。接下来,我将简述安装步骤和所遇问题及其解决方法。 阅读详情

目录

Q1.cmake 过程遇到以下报错:

Q2.make过程中找不到stdlib.h:

Q3.make过程找不到sys/sysctl.h :

Q4. cap_ffmpeg_impl.hpp文件中相关宏的更新:

opencv2与opencv4的(手动源码)安装路径结构差异:


编译器版本:gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

手动编译安装opencv2.4.13版本源码过程中遇到以下错误:

Q1.cmake 过程遇到以下报错:

CMake Error at cmake/OpenCVDetectCXXCompiler.cmake:85 (list):
  list GET given empty list
Call Stack (most recent call first):
  CMakeLists.txt:89 (include)


CMake Error at cmake/OpenCVDetectCXXCompiler.cmake:86 (list):
  list GET given empty list
Call Stack (most recent call first):
  CMakeLists.txt:89 (include)


CMake Error at cmake/OpenCVDetectCXXCompiler.cmake:89 (math):
  math cannot parse the expression: "*100 + ": syntax error, unexpected
  exp_TIMES (1).
Call Stack (most recent call first):
  CMakeLists.txt:89 (include)
 

原因是OpenCVDetectCXXCompiler.cmake中,必须将“dumpversion”更改为“dumpfullversion”

因为在更高版本的gcc中,dumpversion函数无法获取编译器的真实完整版本号,因此cmake过程将失败。

解决办法:在cmake/OpenCVDetectCXXCompiler.cmake文件第81行添加以下代码:

#dumpversion prints only major version since gcc7

if((NOT CMAKE_GCC_REGEX_VERSION) AND (${CMAKE_OPENCV_GCC_VERSION_FULL} GREATER 6))

execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpfullversion

OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL

OUTPUT_STRIP_TRAILING_WHITESPACE)

string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")

endif()

更改的完整文件OpenCVDetectCXXCompiler.cmake在这里:

cmake: fix gcc version detection by sovrasov · Pull Request #9430 · opencv/opencv · GitHub

Q2.make过程中找不到stdlib.h:

/usr/include/c++/11/cstdlib:75:15: fatal error: stdlib.h: 没有那个文件或目录
   75 | #include_next <stdlib.h>
      |               ^~~~~~~~~~
compilation terminated.

原因是gcc 的一些弱微改动导致找不到该文件,在cmake时,关闭预编译头文件即可:

cmake -DENABLE_PRECOMPILED_HEADERS=OFF ..

Q3.make过程找不到sys/sysctl.h :

/home/jadrian/opencv-2.4.13/modules/core/src/parallel.cpp:60:18: fatal error: sys/sysctl.h: 没有那个文件或目录
   60 |         #include <sys/sysctl.h>
      |                  ^~~~~~~~~~~~~~
compilation terminated.

这个报错的主要原因是随着 glibc 2.32( Linux 下使用的开源的标准 C 库,由GNU 发布) 的发布,Linux 系统删除了sys/sysctl.h:

The GNU C Library version 2.32 is now available

这里说明了这个头文件及其函数已经弃用,可以直接将其注释掉。随后几个由这一头文件引起的报错,均将之对引用的头文件行注释掉。

这一条参考:https://github.com/OGRECave/ogre-next/issues/132

Q4. cap_ffmpeg_impl.hpp文件中相关宏的更新:

/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp:1481:21: error: ‘CODEC_FLAG_GLOBAL_HEADER’ was not declared in this scope; did you mean ‘AV_CODEC_FLAG_GLOBAL_HEADER’?
 1481 |         c->flags |= CODEC_FLAG_GLOBAL_HEADER;
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~
      |                     AV_CODEC_FLAG_GLOBAL_HEADER
/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp: In function ‘int icv_av_write_frame_FFMPEG(AVFormatContext*, AVStream*, uint8_t*, uint32_t, AVFrame*)’:
/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp:1505:30: error: ‘AVFMT_RAWPICTURE’ was not declared in this scope
 1505 |     if (oc->oformat->flags & AVFMT_RAWPICTURE) {
      |                              ^~~~~~~~~~~~~~~~
/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp: In member function ‘void CvVideoWriter_FFMPEG::close()’:
/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp:1679:35: error: ‘AVFMT_RAWPICTURE’ was not declared in this scope
 1679 |         if( (oc->oformat->flags & AVFMT_RAWPICTURE) == 0 )
      |                                   ^~~~~~~~~~~~~~~~
/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp: In member function ‘bool CvVideoWriter_FFMPEG::open(const char*, int, double, int, int, bool)’:
/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp:1913:32: error: ‘AVFMT_RAWPICTURE’ was not declared in this scope
 1913 |     if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) {
      |                                ^~~~~~~~~~~~~~~~
In file included from /home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg.cpp:45:
/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp: In static member function ‘static AVStream* OutputMediaStream_FFMPEG::addVideoStream(AVFormatContext*, AVCodecID, int, int, int, double, AVPixelFormat)’:
/home/jadrian/opencv-2.4.13/modules/highgui/src/cap_ffmpeg_impl.hpp:2207:25: error: ‘CODEC_FLAG_GLOBAL_HEADER’ was not declared in this scope; did you mean ‘AV_CODEC_FLAG_GLOBAL_HEADER’?
 2207 |             c->flags |= CODEC_FLAG_GLOBAL_HEADER;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~
      |                         AV_CODEC_FLAG_GLOBAL_HEADER
 

解决办法:修改相关宏定义,在modules/highgui/src/cap_ffmpeg_api.hpp(cap_ffmpeg_impl.hpp的上层头文件)添加宏:(我在13行之后)

#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020

至此,opencv2编译完毕。

opencv2与opencv4的(手动源码)安装路径结构差异:

(1)/usr/local/include下新建了opencv和opencv2两个文件夹,opencv4则是opencv4一个文件夹。

(2)opencv2在/usr/local/lib下除了存放了一些带有版本数字后缀的共享库文件,然后只新建了pkgconfig文件夹(内只有opencv.pc一个文件);而opencv4除了在该目录下安装共享库文件外,只安装了一些.cmake文件在/usr/local/lib/cmake/opencv4下。

(3)如(2)所说,.cmake文件opencv4是安装在/usr/local/lib/cmake/opencv4下,而opencv2是安装在/usr/local/share/Opencv下:

而opencv4的/usr/local/share/目录下是这样的:

视觉SLAM十四讲 Ubuntu20.04 Pangolin 环境配置 视觉SLAM十四讲 Ubuntu20.04 Pangolin 环境配置 一. github下载源代码 选择0.5版本的,要不然版本装高了编译ORB-SLAM2会遇到问题 二. 报错及处理 error: ‘AV_PIX_FMT_XVMC_MPEG2_MC’ was not declared in this scope 详细报错信息 /home/andy/Downloads/Pangolin/src/video/drivers/ffmpeg.cpp: In function ‘std::__cxx11:: 阅读详情

相关推荐

Ubuntu20.04安装OpenCV4.5.5和OpenCV_Contrib4.5.5

可能是你的OPENCV_EXTRA_MODULES_PATH=…/opencv_contrib-4.5.5/modules 版本号不对。前四行命令中的opencv2,有些有可能自己命名了opencv4,在相关目录下删除掉跟opencv相关的文件夹就可以。拷至opencv_contrib-4.5.5/modules/xfeatures2d/test/目录下。下载好解压后,将opencv_contrib4.5.5放在opencv4.5.5文件夹下。进入到最开始自己的安装opencv的build目录。

weixin_47472120的博客 2952

CMake Error at cmake/OpenCVDetectCXXCompiler.cmake:85 (list)

Ubuntu 18.4 安装opencv-2.4.10时遇到如下问题: CMake Error at cmake/OpenCVDetectCXXCompiler.cmake:85 (list): list GET given empty list Call Stack (most recent call first): CMakeLists.txt:77 (include) CMake...

u010003609的博客 7679

ubuntu 22.04 安装驱动可能遇到的坑

ubuntu 22.04 安装驱动可能遇到的坑

sheepc的专栏 3565

CMake Error at cmake/OpenCVUtils.cmake

CMake Error at cmake/OpenCVUtils.cmake:1047 (message): Failed to download . Status= Call Stack (most recent call first): ../opencv_contrib/modules/dnn/cmake/OpenCVFindLibProtobuf.cmake:32 (ocv...

weixin_30835923的博客 2688

WSL2+Ubuntu22.04部署ORB-SLAM3:新环境下的依赖冲突与高效解法

本文详细介绍了在WSL2和Ubuntu 22.04新环境下部署ORB-SLAM3的完整流程。针对因软件版本升级导致的依赖冲突问题,提供了核心依赖库(如Eigen、Pangolin、OpenCV)的特定版本源码编译方案,并给出了CMakeLists.txt及示例代码的关键修改步骤,帮助开发者高效解决编译和运行中的常见错误,成功运行视觉SLAM算法。

weixin_28340315的博客 433

ORB_SLAM2在Ubuntu22.04上的部署与实战排错指南

本文详细介绍了在Ubuntu22.04系统上部署ORB_SLAM2的完整流程与实战排错技巧。从环境准备、依赖安装到源码编译,针对常见兼容性问题提供具体解决方案,帮助开发者高效完成这一流行视觉SLAM框架的部署工作。特别针对Ubuntu22.04的新特性进行了适配优化。

weixin_30552811的博客 292

Ubuntu 22.04 下 ORBSLAM3 的编译部署与 RGB-D TUM 数据集实战评测

本文详细介绍了在Ubuntu 22.04系统下编译部署ORBSLAM3的完整流程,包括环境准备、依赖安装、常见问题排查等关键步骤。特别针对TUM RGB-D数据集进行了实战评测,提供了参数调优和性能优化技巧,帮助开发者快速掌握这一先进视觉SLAM系统的应用方法。

weixin_29008805的博客 338

Ubuntu22.04高效编译OpenCV4.9.0:从依赖配置到实战避坑指南

本文详细介绍了在Ubuntu22.04系统上高效编译OpenCV4.9.0的全过程,从依赖配置到实战避坑指南。涵盖了环境准备、源码下载、CMake配置技巧、编译优化及常见问题解决方案,帮助开发者顺利完成OpenCV的编译安装并优化性能。

weixin_28839629的博客 303

ubuntu22中构建opencv的交叉编译

交叉编译的目标平台架构:armv7l。

lzn948055097的博客 1673

ubuntu22.04安装opencv4和opencv_contrib

选择OpenCV-4.5.0,下载Sources版本,并解压;

MclarenSenna的博客 7025

ubuntu16.04下opencv3.2和opencv_contrib编译安装

网上存在很多编译安装教程,但是为了让整篇文章整体化,把编译安装opencv3.2的过程还是需要在这里在赘述一遍,方便和我一样新入手opencv的小白们只看一篇文章,一次编译成功。 建议:如果是已经编译过opencv3.2后来想在其中加入opencv_contrib的朋友,可能会出现一个bug(后面会提到),而且是在你make完成98%左右的时候出现,所以很伤,建议如果不是有必要的情况或者是项目太

谈笑轩 3万+

Ubuntu20.04 由源码编译安装opencv3.2 OpenCV

在安装并编译 OpenCV 3.2.0 版本时,出现的编译错误主要是由于 OpenCV 代码中使用的 FFmpeg 库宏定义与最新版 FFmpeg 库中的定义不一致所致。具体来说,原有的宏和在较新的 FFmpeg 版本中已被重命名或废弃,从而导致编译失败。这些错误表明存在 API 不兼容的问题,即 OpenCV 的旧代码与新版本 FFmpeg 的接口不匹配。未声明在旧版本的 FFmpeg 中,用于设置编码器标志,指示编码器在输出文件中生成全局头部信息,而不是每个输出帧中都包含头部信息。

m0_73640344的博客 2750

Ubuntu 22.04 opencv gpu cuda 编译及测试

安装前一定要确认这四个的版本匹配。

xcy8185083的博客 2050

Ubuntu22下OpenCV4.6.0+contrib模块编译安装

记录一次在ubuntu20系统下使用cmake-gui工具快速配置编译以及安装opencv4.6的记录,以及一些问题的解决方法。

qq_19449259的博客 7843

Ubuntu 22.04上ROS2 Humble配置MOLA_SLAM全流程与KITTI实战

SLAM(即时定位与地图构建)是机器人自主导航的核心技术,其原理是通过融合激光雷达、视觉等传感器数据,实时估计机器人位姿并构建环境地图。在工程实践中,选择一个模块化、轻量级的框架如MOLA_SLAM,能有效提升开发效率与系统可维护性。MOLA_SLAM设计上对ROS2提供了良好支持,结合Ubuntu 22.04 LTS与ROS2 Humble这一长期支持版本,能构建出稳定可靠的开发基础。本文聚焦于解决在Ubuntu 22.04系统上,为ROS2 Humble配置和运行MOLA_SLAM这一具体工程挑战,涵盖

weixin_34056162的博客 360

Xiaojie雷达之路---毫米波雷达基础知识---中频信号的相位

本篇文章主要介绍毫米波雷达的基础知识中的中频信号的相位 文章目录傅里叶变换的快速回顾中频信号的相位中频信号对物体微小位移的灵敏度如何2个chirps来对一个物体的速度进行测量测量一个振动的物体 傅里叶变换的快速回顾 傅里叶变换是将一个信号从时域中转换到频域中,在时域中的一个正弦信号将在频域中产生一个峰值,在大多数情况下,在频域中的一个信号是一个复数(每个值是一个振幅和相位的向量),表示为AejθAe^{j\theta}Aejθ 在频域中峰值的相位等于正弦函数的初始相位 中频信号的相位 上一篇文章中提到,

XiaoJie的博客 1万+

Ubuntu22.04安装Opencv

如果OpenCV已经被正确安装,那么问题可能出在PKG_CONFIG_PATH环境变量上。你需要将OpenCV的pkg-config文件的路径添加到PKG_CONFIG_PATH环境变量中。sudo make -j2 (中间可能会卡住,关机回到原目录,执行相同的命令)(我换成4G,8线程快的很,但是最后到达100%的时候,CPU达到91度,感觉CPU要烧掉,直接关机了,换成4G,4线程)首先,你需要创建一个新的文件,你可以通过运行以下命令来创建这个文件。然后,你需要将找到的路径添加到你的。

xiaodonglei111的博客 1778

LangFuse部署与实践

LangFuse的原理主要是基于可观察性和分析技术来监控和优化低延迟消息(LLM)应用。它提供了一套完整的解决方案,通过收集、处理和分析LLM应用在运行过程中产生的各种数据,来生成实时的、深入的、可操作的见解。通过提供实时的、深入的见解和可视化的跟踪功能,LangFuse使得识别和解决应用性能问题变得更加简单和高效。总的来说,LangFuse的原理是通过综合运用可观察性和分析技术,来提供对LLM应用的全面监控和优化能力。这使得开发者和运维团队能够更加高效地管理和维护他们的应用,从而提升用户体验和业务效益。

pumpkin84514的博客 7914

Ubuntu 20.04安装配置opencv4.2.0及踩坑

Ubuntu 20.4安装配置opencv4.2.0及踩坑 所需各种文件链接在此 链接:https://pan.baidu.com/s/1kf_cljseuUbq7MqzBg-TQw 提取码:ooh2 一、在安装配置opencv之前如果没换源的建议换源,不然安装各种依赖库应该会很慢。 换源 1.备份 sudo cp -ra /etc/apt/sources.list /etc/apt/sources.list.bak 2.打开文件 sudo vi /etc/apt/sources.list 3.复制源(这是

a123_445的博客 8258

Win11 C盘爆满别慌!手把手教你安全迁移AppData和用户文件夹(附一键脚本)

本文针对Win11 C盘空间不足问题,提供了一套安全有效的解决方案。通过深入解析用户目录结构,指导用户利用符号链接和Robocopy工具,将AppData、下载文档等占用大户迁移至其他分区,并附带了自动化脚本,从根本上实现C盘瘦身,同时确保系统稳定和数据安全。

weixin_29231221的博客 2066

大麦APP抢票协议分析:从‘掌密网络’代码看移动端API安全防护

本文深度解析了大麦APP抢票协议的安全防护体系,重点分析了'掌密网络'代码中体现的动态签名、设备指纹和人机验证等关键技术。文章详细介绍了大麦APP如何通过多层次API安全防护应对抢票压力,包括参数加密、请求头部设计和异常处理机制,为移动应用开发者提供了安全实践建议。

weixin_28740299的博客 282

Ubuntu 18.04 安装 OpenCV 和 OpenCV_Contrib

本文详细介绍了在Ubuntu系统下安装OpenCV及Contrib扩展库的完整流程。主要内容包括:1)彻底卸载旧版OpenCV的方法;2)从官网或GitHub获取指定版本源码;3)安装编译所需的依赖环境;4)通过CMake配置编译参数(特别注意contrib模块路径设置);5)解决常见编译错误(如缺失boostdesc文件、路径错误等);6)配置动态链接库路径;7)通过示例程序测试安装结果。文中针对4.6.0版本提供了具体操作命令,并强调了版本一致性要求,最后给出了验证安装成功的命令和错误排查方法。

人无远虑,必有近忧 4307

f_fs.c 初始化流程(进行中)

前言 之所以选择f_fs.c作为这系列的开始,因为usb在/driver/usb下面的内容实在太多太多,如果讲各种各样点会太分散了。所以决定切入点以实际使用为主,就是f_fs了,目前我了解这是做bulk裸传输使用的,具体的通信协议自己确定。 初始化部分 开始点从这个路径下说起, /drivers/usb/gadget/function/f_fs.c 然后f_fs.c第一个使用的是include/composite.h中的宏定义function #define DECLARE_USB_FUNCTION(_n

weixin_36406973的博客 1962
上一篇: error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope
下一篇: g2o构造求解器的陷阱——关于unique智能指针的禁止复制语义
海雾楼艾迪尔
博客等级 码龄6年 46粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值