Windows编译环境搭建(MSYS2\MinGW\cmake)

我的音视频/流媒体开源项目(github)

一、基础环境搭建

1.1 MSYS2\MinGW

参考:1. 基于MSYS2的Mingw-w64 GCC搭建Windows下C++开发环境_msys2使用mingw64编译

在Widndows系统上,使用gcc工具链(g++)进行C++程序开发?可以的!本文将就如何搭建这样一个环境,展开介绍。

  • Windows下C/C++程序开发的差劲开发体验:

1、首先需要安装≈20 GB的Visual Studio(大型团队项目,还是需要VS的);

2、然后,很多第三方库,需要自己去GitHub或者相应的官网上下载源码,然后进行编译,而编译过程会遇到各种版本不兼容、缺少依赖、代码错误、需修改makefile文件等问题......至此库尚未编译成功,开发人员早已经被这差劲的体验劝退......

  • MSYS2有三个优点:

1、仿Linux的终端交互环境,可以使用Linux下的终端命令和快捷方式;

2、自带pacman软件管理包,让您将精力放到C++代码的编写上,而不是复杂的依赖环境的搭建和编译。如:GDAL、OpenCV等第三方C/C++库,无须再去踩各种坑、艰难地编译而是直接一个命令就安装到了本地;

3、复用自己在Linux下的开发经验。使用g++进行库的链接、源码编译等操作,可更进一步了解C++代码的编译过程。

下载MSYS2

https://www.msys2.org/,进入MSYS2的官网,然后找到如下图下载链接,点击即可进行下载。

安装MSYS2

如下图,MSYS2的整个安装过程无须特别的设置,一路默认下一步即可,安装位置建议不要用C盘,因为后续使用pacman安装软件很占用空间,我是用了D盘。

配置pacman镜像源

  • pacman是随MSYS2一起安装的软件包管理工具
  • 安装完成MSYS2后,则可以在如下路径找到镜像配置文件:D:\msys64\etc\pacman.d,格式为mirrorlist.*,然后进行配置,配置前后的结果如下面两幅图所示。这里说的配置,其实就是将配置文件内的两个国内的镜像源"tsinghua(清华)"和"ustc(中科大)",移动(剪切粘贴)到主镜像(## Primary标识的msys2)的前面。

更新pacman基本软件仓库

配置完镜像源后,需要更新pacman的基本软件仓库,这分两个步骤:

第一步,执行如下命令,检查更新并下载,过程中,MSYS2可能会因为安装更新而自动关闭,此时,可再次在开始菜单中打开,然后再次执行"pacman -Syu"命令。

pacman -Syu

第二步,确定"pacman -Syu"命令的更新完毕,如下图,则说明更新完毕,然后执行如下命令,以更新因执行上已更新操作,而未更新的剩余程序。

pacman -Su

安装Mingw-w64 GCC编译工具链

Mingw-w64是Windows编译C/C++源代码的程序集,为了安装该软件,须执行如下命令,即可安装编译C/C++程序所需的编译工具如:gcc、g++、make等。此步骤安装的软件包较多,因此可能需要一定时间,取决于网络和电脑配置,约需3-5分钟。

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

把D:\msys64\mingw64\bin(替换成实际路径)加入到环境变量中,就可以在任何位置使用gcc、g++、gdb以及mingw32-make等工具了,在cmd中和VSCode终端都可以,个人觉得使用msys2生成的MinGW64程序反而不方便。添加完环境变量之后在cmd下,输出gcc --version 和mingw32-make --version验证。如果不添加环境变量,就只能调用D:\msys64\mingw64.exe使用gcc/g++等工具,很不方便,我基本都是在VSCode中写代码并编译。

自此就可以使用VSCode,甚至记事本写C/C++程序,并使用gcc/g++编译了。注意编译出来的程序就是.exe结尾的(动态库是.dll和.dll.a结尾的,.lib是给MSVC编译器用的,也就是Visual Studio。MinGW使用的是.dll.a+.dll;MSVC是.lib+.dll,两者是不一样的),这里的MinGW只是模拟在Linux下的编译过程,但是生成程序或者动态库等还是Windows风格的。

注意:尽量不要再VSCode终端里面执行程序,因为CMD和VSCode的程序运行起来表现不一样,尤其是在多线程环境下,编译在CMD和VSCode终端下都是可以的。

当然,MinGW也可以不通过msys2安装,直接在电脑上安装MinGW也是可以的,但是因为在开发过程中,肯定还会用到其他的库和软件,如果每个都单独安装很麻烦,通过msys2就可以像Linux那样,直接在线使用命令安装,然后再加入Windows的环境变量中就可以了。此外如果涉及到要源码编译开源库,使用msys2也很方便,msys2简化了windows的软件安装和开源库源码编译过程,不用msys2也是可以的,只不过不方便。

二、cmake

再安装一个cmake,就可以实现大型项目的构建了,而且跨平台(cmake不用msys2安装,单独安装即可,同样要加入到环境变量,在任何位置都可以使用)。

参考:Windows下CMake的下载与安装详解_cmake下载-CSDN博客

CMake的下载与安装

CMake下载链接:https://cmake.org/download/

下载最新稳定版即可(Latest Release):

下载完成后,单击"Next"按钮,在下图中勾选"I accept the terms in the License Agreement"复选框接受许可协议:

选中"Add CMake to the system PATH for all users"单选按钮添加系统路径变量。也可以同时勾选"CreateCMakeDesktopIcon"复选框,以便在安装完成后在桌面上创建CMake的快捷方式图标。

点击Install进行安装,在CMD下使用cmake --version进行验证。

自此就可以使用cmake和MinGW构建项目了,构建过程和Linux略有区别,不过cmake和gcc/g++语法都是一样的,步骤如下:

mkdir build
cd build
cmake -G "MinGW Makefiles" ..
mingw32-make

至此,就在Windows上搭建好了代码编译环境,我使用的是VSCode + MinGW + Cmake,如下图所示。

三、编译FFmpeg

在Windwos使用ffmpeg有两种方式:

1、在ffmpeg官网下载Windows上编译好的库,MinGW和MSCV都可以使用,因为.lib和.dll.a都有(为什么我不说.dll,因为无论是MinGW还是MSCV都需要.dll,.dll是exe程序运行必须有的,除非是静态链接。)

2、源码编译,因为ffmpeg官方编译好的库很多功能都没有用,比如,没有fdk-aac,如果要用fdk-aac就只能自己源码编译,此外有的软件,例如opencv只提供了.lib和.dll,没有.dll.a,要想在MinGW中使用,就必须源码编译(opencv编译坑很多,我是直接从网上下载编译好的,这一点和Linux不同,Linux上一台机器上编译出来的库很难在另外一台Linux上使用,除非环境及版本高度相似)。在msys2上和Linux上编译ffmpeg很相似。

依赖安装:

需求,在ffmpeg中添加libx264、libx265、libfdk-aac

首先用msys2搜索一下x264,使用命令:

 pacman -Ss x264

我是mingw64,所以安装mingw-w64-x86_64-libx264,命令为:

 pacman -S mingw-w64-x86_64-libx264

使用命令查看libx264的安装位置,命令为:

pacman -Ql mingw-w64-x86_64-libx264

在msys的安装路径下就可以找到这些库,知道库和头文件的位置,后面就可以用了。

用同样的方式安装libx265和fdk-aac,命令为:

pacman -S mingw-w64-x86_64-x265 #mingw-w64-x86_64-x265包含了x265可执行程序,之前安装的mingw-w64-x86_64-libx264不包含x264可执行程序,如果安装libx264的时候想包含x264.exe也可以安装mingw-w64-x86_64-x264,我们只用x264和x265的库,有没有exe都可以,我们不用
pacman -S mingw-w64-x86_64-fdk-aac

安装汇编库

pacman -S mingw-w64-x86_64-yasm mingw-w64-x86_64-nasm

ffmpeg源码下载:

下载地址:https://ffmpeg.org/releases/

我下载的是4.4.5

此时我们打开minw64,用来编译ffmpeg源码。

查看当前所在目录

当前所在目录为/home/sunkx1,在Windows上的实际路径就为D:\msys64\home\sunkx1,把下载的ffmpeg源码放到D:\msys64\home\sunkx1下面,ls看一下,就可以看到ffmpeg源码了。

解压:

tar -zxvf ffmpeg-4.4.5.tar.gz

进入到源码目录:

cd ffmpeg-4.4.5/

配置:

./configure --prefix=/home/sunkx1/ff-build --enable-libx264 --enable-libx265 --enable-gpl --disable-x86asm --enable-nonfree --enable-libfdk-aac  --enable-shared  --extra-cflags=-I/mingw64/include --extra-ldflags=-L/mingw64/lib

--prefix指定安装目录。

--enable-gpl:允许使用 GPL 许可证 的组件,比如 libx264 和 libx265,如果没有这个选项,FFmpeg 会拒绝编译 libx264。

--enable-nonfree:启用一些 非自由组件,不启用,libfdk-aac 就无法使用。

--disable-x86asm:禁用 x86 汇编优化(主要影响 H.264/HEVC 编码性能)。

--enable-shared:启用共享库(动态库 .dll 或 .so)。

--extra-cflags和--extra-ldflags指定libx264、libx265、libfdk-aac的安装路径。

编译安装:

make -j
make install

把如下路径添加到环境变量

D:\msys64\mingw64\bin
D:\msys64\home\sunkx1\ff-build\bin

第一个是x264、x265、fdk-aac的库所在位置(.dll)

第二个是ffmpeg库所在位置(.dll和exe)

配置好之后就可以在cmd中使用ffmpeg了,

在cmake中配置,就可以使用ffmpeg了

1、头文件位置

D:\msys64\mingw64\include
D:\msys64\home\sunkx1\ff-build\include

2、链接库位置

D:\msys64\mingw64\lib
D:\msys64\home\sunkx1\ff-build\lib
相关推荐
waicsdn_haha30 分钟前
GIMP 2.10 开源图像编辑软件安装教程(Windows平台)
windows·开源·gimp·图层管理·平面设计·照片修复·色彩校正
.m1 小时前
CAD2025电脑置要求
windows
猫霸1235419 小时前
Windows编程----进程:环境变量
c++·windows
周万宁.FoBJ19 小时前
如何在rust中解析 windows 的 lnk文件(快捷方式)
开发语言·windows·rust
caoruipeng20 小时前
Windows编程----进程:环境变量
c++·windows·环境变量
Cony_1420 小时前
Windows系统中在VSCode上配置CUDA环境
windows·vscode·cmake·cuda
小乖兽技术1 天前
验证测试 .NET 10 预览版的 Windows 窗体中的剪贴板新增功能
windows·.net
WiKiLeaks_successor1 天前
R的安装以及jupyter配置windows
windows·jupyter·r语言
web137656076431 天前
DeepSeek API 调用 - Spring Boot 实现
windows·spring boot·后端
摸鱼仙人~1 天前
结合unittest和pytest进行虚拟数据库测试
数据库·windows·pytest