MSYS2中不同GCC编译器的区别及相关技术疑问
MSYS2相关编译器及环境问题解答
1. MSYS2中gcc与mingw-w64-x86_64-gcc的区别
- 运行依赖差异:
- msys仓库的gcc编译出的
.exe必须依赖msys-2.0.dll这个运行时库才能启动,这个库是MSYS2提供的POSIX兼容层,相当于给程序套了个类Linux的运行环境。 - mingw-w64-x86_64-gcc编译出的是原生Windows程序,要么依赖Windows系统自带的API,要么只需要轻量的MinGW运行时库(还能通过静态链接彻底去掉额外依赖),不需要任何POSIX兼容层就能直接在Windows上跑。
- msys仓库的gcc编译出的
- 编译目标与特性支持:
- msys的gcc更适配依赖POSIX/Linux特性的程序,比如用到
fork、Linux风格线程实现的工具,很多从Linux移植过来的命令行工具会用它编译。 - mingw-w64的gcc主打原生Windows开发,对Win32 GUI、COM等Windows专属特性支持更完善,编译出的程序和普通Windows软件行为完全一致。
- msys的gcc更适配依赖POSIX/Linux特性的程序,比如用到
- 适用场景:如果是开发原生Windows应用、游戏或者不需要Linux特性的工具,选mingw-w64-x86_64-gcc;如果是移植Linux工具、搭配MSYS2的POSIX脚本环境开发,选msys的gcc。
2. MSYS2的工具运行机制
MSYS2包含两种独立的环境,不能混为一谈:
- MSYS环境:这里的gcc等类Linux命令,是基于MSYS2自研的POSIX兼容抽象层(改进自Cygwin运行时)工作的,这个层会把Linux的系统调用转译为Windows API,让原本只能在Linux上跑的工具能在Windows上运行。
- MinGW-w64环境:这里的mingw-w64-x86_64-gcc是原生Windows版本的GCC发行版,完全不需要依赖MSYS的抽象层,直接生成原生Windows程序,和单独安装MinGW-w64的效果没差别。
内容的提问来源于stack exchange,提问作者A.M
相关产品推荐
相关产品推荐

