目录

Windows编译环境搭建MSYS2MinGWcmake

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

一、基础环境搭建

1.1 MSYS2\MinGW

参考:

在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

,进入MSYS2的官网,然后找到如下图下载链接,点击即可进行下载。

https://i-blog.csdnimg.cn/direct/7b20aa954d7d4f79a899270773c70d30.png

安装MSYS2

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

https://i-blog.csdnimg.cn/direct/c118d7e7e5f840d68720dfa93b08db65.png

配置pacman镜像源

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

https://i-blog.csdnimg.cn/direct/c00c99a3cbb24a329624aca672eb74f5.png

https://i-blog.csdnimg.cn/direct/73e3e4a76a9345dba3f032c9ab25719e.png

更新pacman基本软件仓库

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

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

pacman -Syu

https://i-blog.csdnimg.cn/direct/6edfcab43e2742fba86dd3521d853e7c.png

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

pacman -Su

https://i-blog.csdnimg.cn/direct/9d6186d88a434b1ba4c9e5c26cfc63d6.png

安装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

https://i-blog.csdnimg.cn/direct/5ec90d5f35f54ef887af7650a895f524.png

https://i-blog.csdnimg.cn/direct/dc4bbab1286c4f0d9a5fe2586da66db2.png

把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中写代码并编译。

https://i-blog.csdnimg.cn/direct/bf64e822797d4366962c89bbde03a2fc.png

自此就可以使用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安装,单独安装即可,同样要加入到环境变量,在任何位置都可以使用)。

参考:

CMake的下载与安装

CMake下载链接: 。

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

https://i-blog.csdnimg.cn/direct/cafca7f36c8d491e89d053afa544e39e.png

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

https://i-blog.csdnimg.cn/direct/a9acd0784113419e8fe4e9c920dd6b95.png

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

https://i-blog.csdnimg.cn/direct/456627b5f0cb426b81ebdc51298174de.png

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

https://i-blog.csdnimg.cn/direct/7362c73bd6c947b1b5c59aa678f14849.png

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

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

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

https://i-blog.csdnimg.cn/direct/b16d7b175c0c4b0bb65ce8a387f0f0b4.png

三、编译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

https://i-blog.csdnimg.cn/direct/2f10b533456546349ab6897f4db337bf.png

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

 pacman -S mingw-w64-x86_64-libx264

https://i-blog.csdnimg.cn/direct/826957eb0f764a7f9c137d0d8cab0125.png

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

pacman -Ql mingw-w64-x86_64-libx264

https://i-blog.csdnimg.cn/direct/b71ac1e92e0b417fa3543b5291b08c54.png

在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://i-blog.csdnimg.cn/direct/feb398b6a6e84f56907a21be789eca7e.png

我下载的是4.4.5

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

https://i-blog.csdnimg.cn/direct/b2bd21cfcc9b48dabf8cba7806c96567.png

查看当前所在目录

https://i-blog.csdnimg.cn/direct/82740536cdae4e8fbf11775b840c0663.png

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

https://i-blog.csdnimg.cn/direct/a2bf20facbea4618b9893c31327fd170.png

解压:

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

上面编译出来的ffmpeg不包含ffplay,因为ffplay依赖sdl,所以需要安装sdl才可以,同样使用pacman安装即可。