windows 编译 opencv

news/2025/2/2 7:57:59/

编译需要的基础工具
#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再编译一次,就能快速看到详细报错


http://www.ppmy.cn/news/66426.html

相关文章

亲测好用|甲方、专家和领导,用三维模型汇报方案如何投其所好?

身为设计方的你,有没有这样的经历: ➤ 一个非常优秀的方案未能被甲方采纳,反而甲方选择了一个不如自己的方案,造成了很大的遗憾; ➤ 在讲述自己的设计方案的时候,经常越说越散,甚至到了最后自…

MD-MTSP:遗传算法GA求解多仓库多旅行商问题(提供MATLAB代码,可以修改旅行商个数及起点)

一、多仓库多旅行商问题 多旅行商问题(Multiple Traveling Salesman Problem, MTSP)是著名的旅行商问题(Traveling Salesman Problem, TSP)的延伸,多旅行商问题定义为:给定一个𝑛座城市的城市集…

MySQL 字段为 NULL 的坑,你踩过吗?

前言 很多小知识点,我以为自己懂了,实际没搞透。 数据库字段允许空值(null)的问题,你遇到过吗? 在验证问题之前,我们先建一张测试表及测试数据。 构建的测试数据,如下图所示: 有了上面的表及…

Feign踩坑源码分析--@FeignClient注入容器

一. EnableFeignClients 1.1.类介绍 从上面注释可以看出是扫描声明了FeignClient接口的类,还引入了 FeignClientsRegistrar类,从字面意思可以看出是进行了 FeignClient 客户端类的注册。 1.2.FeignClientsRegistrar 详解 最主要的一个方法:re…

南大通用数据库-Gbase-8a-学习-35-rmt(远程导出数据文件)

目录 一、测试环境 二、引入 三、rmt导出流程 四、Linux环境模拟实验 1、不加rmt导出数据 2、加rmt导出数据 一、测试环境 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2目的端Gbase8a版本8.6.2-R43源…

网安笔记10 Securities of Lower-layer Protocol

Securities of Lower-layer Protocol 协议 TCP/IP IP 网际协议 源目的地址比特位选项、头检验,数据净荷IP数据包击败字节到 160000字节IP级上无虚拟电路概念数据包独立不稳定保证只检验IP头,正确性不检验 安全性:无法保证数据从数据包给…

Kubernetes对象之PersistentVolume,PersistentVolumeClaim和StorageClass

前面我们学习了Kubernetes中的Volume,我们可以发现前文中的Volume(无论何种类型)和使用它的Pod都是一种静态绑定关系,在Pod定义文件中,同时定义了它使用的Volume。在这种情况下,Volume是Pod的附属品&#x…

LangChain-Agents 入门指南

LangChain-Agents 入门指南 LangChain-Agents 入门指南注册 Serpapi运行高级 Agents API 测试运行 Google Search其它 Here’s the table of contents: LangChain-Agents 入门指南 LangChain是一个使用LLMs构建应用程序的工具箱,包含Models、Prompts、Indexes、Mem…