windows 编译 opencv

编译需要的基础工具
#cmake是配置构建工具,mingw是编译工具

cmake

CMake是一款跨平台的编译管理工具,可以自动生成各种不同编译环境(如Makefile、Visual Studio Solution等),从而实现在不同平台上进行代码编译的目的。CMake提供了一种简单的语法描述(CMakeLists.txt文件)来描述构建过程,并通过生成相应的构建脚本来完成编译构建过程。CMake主要被用于C++的工程管理和构建,但也可以用于其他语言。

cmake下载地址: https://cmake.org/download/

  1. 下载zip版本“cmake-3.xx-win64-x64.zip”
  2. 解压到指定目录并添加bin所在目录到环境变量。
  3. 在终端输入“cmake --help”或 “cmake --version”查看是否配置成功。

mingw

mingw-W64 是一款用于 Windows 操作系统的开源 C/C++ 编译器集合,它完全兼容 GNU 工具集,可以在 Windows 平台上编译出可以在 Windows、Linux 和 macOS 等操作系统上运行的可执行文件。 mingw-W64 可以生成 32 位和 64 位应用程序,同时还支持 Windows API、POSIX API 和 OpenMP。

mingw-W64下载链接:https://sourceforge.net/projects/mingw-w64/files/

  1. 推荐下载 离线版本“x86_64-posix-seh”

  2. 解压到指定目录并将bin目录加入到环境变量

  3. 在终端输入 “gcc --version”。查看是否安装成功。

opencv

下载链接:https://opencv.org/releases/

本次 Windows 环境的安装,因此下载OpenCV-4.6.0 Windows 版。

准备文件

双击下载好的exe文件,程序会生成 opencv 文件夹。
这个 opencv 文件夹就是我们后面的编译源文件。
新建一个文件夹 build_for_vscode ,用于存放我们后面的编译结果。

1. 配置

打开 cmake 的编译配置软件:
我的软件路径是 D:\appdata\cmake\cmake-3.26.0-rc2-windows-x86_64\bin\cmake-gui.exe
下面的步骤不同情况可能先后顺序不一样,但是配置过程一致。

  1. 双击 cmake-gui.exe 开始配置。

  2. 将opencv中的sources文件添加进来
    对于 where is the souce code:选择前面 opencv 原文件下到 sources 位置
    对于 where is build the binaries:选择新建的编译结果保存文件夹

  3. 点击 configure 开始配置
    在弹出的界面中:
    Specify the generator for the project中选择:
    MinGw makefiles
    Specify native compilers
    next

  4. 配置编译器 mingw
    C : D:/appdata/mingw64/bin/gcc.exe
    C++:D:/appdata/mingw64/bin/g++.exe
    点击Finish开始配置

  5. 假设你配置完全OK了,也就是 cmake-gui.exe 下面的配置输出没有任何标红出现。那么 Configuring done (7.2s) 后再点击 generate,出现Generating done (2.8s)。配置就结束了。下一步就是编译。

如果配置存在问题,请看本篇博文最后。

成功界面应该没有任何标红,如图:

2.编译

编译过程简单得多,直接在终端打开上面的配置输出目录:
编译:
mingw32-make

编译加速:
mingw32-make -j16

成功如图:

安装:
mingw32-make install

配置过程的其他问题

出现问题后可以在编译结果 CMakeDownloadLog.txt 中查看详细信息。这里主要记录一些坑。

坑一

最为经典的一个报错:FFMPEG下载失败,这是因为需要访问外网引起的
办法:
翻墙下载离线文件,替换源代码中“opencv/sources/.cache/ffmpeg”下的 0KB 空文件。
用后面三个我自己下载的有内容的文件,替换没有内容的 0KB 空文件。

注意保留文件名替换,替换后如图:

三个文件的下载链接其实就在CMakeDownloadLog.txt 报错信息中,但科学上网才能下载。如果没有条件,这个有一个不用科学上网的分享。
FFMPEG下载失败以及分享:https://www.codenong.com/cs109394452/
坑:ffmpeg_version.cmake 不要复制保存,要将整个文件从网页下载重命名。
附,三个文件科学上网下载地址:
opencv_videoio_ffmpeg_64.dll下载地址:https://raw.githubusercontent.com/opencv/opencv_3rdparty/65ec04d4573dcdfa4531f0b9e67f35d8ffff873e/ffmpeg/opencv_videoio_ffmpeg_64.dll

opencv_videoio_ffmpeg.dll下载地址:
https://raw.githubusercontent.com/opencv/opencv_3rdparty/65ec04d4573dcdfa4531f0b9e67f35d8ffff873e/ffmpeg/opencv_videoio_ffmpeg.dll

ffmpeg_version.cmake下载地址:
https://raw.githubusercontent.com/opencv/opencv_3rdparty/65ec04d4573dcdfa4531f0b9e67f35d8ffff873e/ffmpeg/ffmpeg_version.cmake

坑二:配置(configure)时总是找到anaconda下面的python版本,标红说python版本不合适,最后编译不通过

不管是何种情况,我现在的配置是和anaconda 没有关系的,但配置过程却总是找到ananconda的二进制文件,比如 PYTHON 版本警告。
办法:系统环境变量 PATH 删除一切关于anaconda的环境变量,同时!!!必须重启电脑!坑!

编译过程的其他问题

问题:CMakeFiles\opencv_highgui.dir/objects.a(moc_window_QT.cpp.obj)
办法: https://blog.csdn.net/qq_21555569/article/details/122776588

问题:opencv编译时,想要的环境似乎没有找到
办法:环境变量设置好了以后,一定要重启电脑

问题:编译速度慢
办法:查看电脑CPU数量,在命令mingw32-make加上j16 -------> mingw32-make -j 16

问题:使用-j16后报错不一样
办法:先用命令mingw32-make -j16 快速编译一遍,然后去掉j16再编译一次,就能快速看到详细报错

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qwik 1.0 发布,全栈式 Web 框架

Qwik 是一个全栈式 Web 框架,Qwik 基于 React、Angular 和 Vue 等其他 Web 框架的概念,但以 JavaScript 流等更新的方法脱颖而出,允许以高性能向用户交付复杂的 Web 应用程序。 随着 Web 应用程序变得越来越大,它们的启动性能会下…

强烈推荐:一款中文AI问答、创作、绘画工具

前言 相信很多人已经听过ChatGPT这款人工智能机器人了,它能够根据用户输入的内容,自动生成智能回复。它使用自然语言处理技术,通过学习大量的文本资料,能够模拟人类的对话行为。它是由OpenAI开发的,一家非常伟大的人工…

Http知识

一、http协议 目前存在HTTP1.1(当前广泛运用的版本)、HTTP2.0和HTTP3.0协议,有以下的优点和缺点 1. HTTP1.1 优点:默认支持长连接,即在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的…

Flutter框架:从入门到实战,构建跨平台移动应用的全流程解析

第一章:Flutter框架介绍 Flutter框架是由Google推出的一款跨平台移动应用开发框架。相比其他跨平台框架,Flutter具有更高的性能和更好的用户体验。本章将介绍Flutter框架的概念、特点以及与其他跨平台框架的比较,以及Flutter开发环境的搭建和…

应急物流 | 灾后早期阶段多目标选址路径问题的混合元启发式算法

解读作者:李奡,闫同仁 A hybrid meta-heuristic algorithm for the multi-objective location-routing problem in the early post-disaster stage Tongren Yan, Fuqiang Lu, Suxin Wang, Leizhen Wang, Hualing Bi Journal of industrial and managem…

设计原则之【接口隔离原则】,我只做我能做的事

文章目录 一、什么是接口隔离原则二、实例三、总结接口隔离原则与单一职责原则的区别 一、什么是接口隔离原则 接口隔离原则(Interface Segregation Principle, ISP)是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖…

【中级软件设计师】—(下午题)试题三精讲总结(四十二)

【中级软件设计师】—(下午题)试题三精讲总结(四十二) 一、关系 二、UML中的图 A包含B,那么A执行操作前必须要先执行B 试题一(2021年下半年) 试题2(2021年上半年) 官方…

Docker中部署监控

Docker概念 一、部署Prometheus+grafana环境 1.1 、部署Prometheus+grafana环境 docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/lhrprometheus:1.0 docker tag registry.cn-hangzhou.aliyuncs.com/lhrbest/lhrprometheus:1.0 lhrbest/lhrprometheus:1.01.2 、创建镜…

linux 定时器

Linux 系统实现底半部的机制主要有tasklet,工作队列和软中断。 tasklet 和工作队列都是调度中断底半部的良好机制,tasklet 基于软中断实现。 内核定时器也依靠软中断实现;内核中的延时是忙等待或者睡眠等待,为了充分利用CPU资源&#xff0c…

docker 搭建 Elasticsearch和Kibana 8.x版本

参考: docker入门:单机elasticsearch安装记录,保证无坑_8月日更_小鲍侃java_InfoQ写作社区 新建文件夹 同上文所述相同,需要在宿主机上挂载配置文件与数据文件。 mkdir -p /Users/louye/data/learn-data/elastic/config mkdir -p /Users/lo…

从地方旅游的宣传谈起:如何吸引主流媒体报道,强势刷屏?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 五一小长假已经过去好几天了,大家渐渐的从假期舒适的闲暇转到正常的工作生活中了,但利用五一热点宣传的余温还在继续,今天胡老师就i注意到一篇题为&am…

华为nqa实验拓扑案例

nqa是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。如图1所示,接口备份与NQA联动功能配置相对简单,只需在本端RouterA上配置NQA测试例,并在RouterA的备份接口上配置接口备份与NQA联动&…

重写Properties类,实现对properties文件的有序读写,数据追加,解决中文乱码

前言 *.properties文件,是 Java 支持的一种配置文件类型,并且 Java 提供了 properties 类来读取 properties 文件中的信息。文件中以键值对 "键值"的形式,存储工程中会多次重复使用的配置信息,通过“Properties”类来读…

4.Redis10大数据类型

Redis10大数据类型 Which 101.String(字符串)2.List(列表)3.hash (哈希)4.Set(集合)5.zset(sorted set:有序集合)6.Redis GEO (地理空间)7.HyperL…

Linux最常用的15个基本命令

目录 Linux基本命令 命令1:ls (查看指定目录中有哪些内容) ls / 相当于查看根目录中的内容,相当于查看我的电脑 ls -l(小写l,或者使用ll)详细查看目录下所有内容 ls /usr/lib&#xff08…

“AI代劳”,跨域赋能“智慧企业”

随着全球数字信息化的到来,各大新兴行业企业也逐渐意识到“智慧化”转型的重要性,但目前仍有不少企业在面临着人力成本高、运营管理效率低、营销获客效果差、数据分析能力薄弱等瓶颈,那么,处于这些瓶颈期的企业该如何实现“智慧化…

【Java零基础入门篇】第 ④ 期 - 继承(二)

博主:命运之光 专栏:JAVA入门 学习目标 1.掌握继承性的主要作用、实现、使用限制; 2.掌握this和super的含义及其用法; 3.掌握方法覆写的操作; 4.掌握final关键字的使用; 5.掌握类变量、实例变量和局部变量的…

数据库创建与管理

目录 一、创建数据库 1.准备创建数据库 2.创建数据库实例分析 方法一:使用对象资源或企业管理器创建数据库 方法二:使用Transact-SQL命令创建数据库 二、管理数据库 1.修改数据库 使用SQL命令修改数据库 2&…

如何将ChatGPT训练成某个领域的专家!附完整示例!

背景 最近听了 八叉的一个ChatGPT讲座,讲的是如何将ChatGPT训练成领域专家,这样我们就可以用它来解决该领域的各种问题。 整个讲座中最让我印象深刻的就是训练方法,它是通过让ChatGPT向我们提问,然后由我们给出答案的方式进行训…

自学Java怎么找工作?好程序员学员大厂面试经验分享!

简历要详细: 简历中的项目用到的技术点和个人负责的模块尽量写详细一些。其次,根据自己项目中用到的熟悉的技术点,在个人技能介绍模块去突出,面试官基本会根据你简历上写的去提问的,这样我们回答起来就会更加得心应手。…