MSYS2 和 MinGW 都提供 gcc,但是属于两个完全不同的工具链。
前者属于 msys2-devel ,后者属于 mingw-w64-$arch-toolchain。
使用 mingw-gcc 编译的目标文件是原生的,而使用 msys2-gcc 编译的目标文件依赖于 msys2 提供的虚拟 POSIX 环境。
如果你要编译的东西强依赖于 POSIX syscall (比如 fork 等),那么就要用 MSYS2 的 gcc。而如果是要当做一个 release 拿去给别人用的,用 MinGW 的 gcc 好些。当然,事情也不绝对,对于前者你也可以给源文件 patch 一个 MinGW 移植,对于后者也可以用 MSYS2 然后附带上 相关dll。
文尾附上MSYS2 编译FFmpeg依赖项: