编译需要的基础工具
#cmake是配置构建工具,mingw是编译工具
cmake
CMake是一款跨平台的编译管理工具,可以自动生成各种不同编译环境(如Makefile、Visual Studio Solution等),从而实现在不同平台上进行代码编译的目的。CMake提供了一种简单的语法描述(CMakeLists.txt文件)来描述构建过程,并通过生成相应的构建脚本来完成编译构建过程。CMake主要被用于C++的工程管理和构建,但也可以用于其他语言。
cmake下载地址: https://cmake.org/download/
- 下载zip版本“cmake-3.xx-win64-x64.zip”
- 解压到指定目录并添加bin所在目录到环境变量。
- 在终端输入“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/
-
推荐下载 离线版本“x86_64-posix-seh”
-
解压到指定目录并将bin目录加入到环境变量
-
在终端输入 “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
下面的步骤不同情况可能先后顺序不一样,但是配置过程一致。
-
双击 cmake-gui.exe 开始配置。
-
将opencv中的sources文件添加进来
对于 where is the souce code:选择前面 opencv 原文件下到 sources 位置
对于 where is build the binaries:选择新建的编译结果保存文件夹 -
点击 configure 开始配置
在弹出的界面中:
Specify the generator for the project中选择:
MinGw makefiles
Specify native compilers
next -
配置编译器 mingw
C : D:/appdata/mingw64/bin/gcc.exe
C++:D:/appdata/mingw64/bin/g++.exe
点击Finish开始配置 -
假设你配置完全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再编译一次,就能快速看到详细报错