# WindowsGCC
# Flag
- 第三方针对各种不同系统制作的GCC安装包 (opens new window)
- http://www.cygwin.com (opens new window)
- https://sourceware.org (opens new window)
C语言的编译器有很多种,不同的平台下有不同的编译器
- Windows 下常用的是微软开发的 Visual C++,它被集成在 Visual Studio 中,一般不单独使用;
- Linux 下常用的是 GUN 组织开发的 GCC,很多 Linux 发行版都自带 GCC;
- Mac 下常用的是 LLVM/Clang,它被集成在 Xcode 中(Xcode 以前集成的是 GCC,后来由于 GCC 的不配合才改为 LLVM/Clang,LLVM/Clang 的性能比 GCC 更加强大)。
Visual C++(简称 MSVC)是由微软开发的,只能用于 Windows 操作系统;GCC 和 LLVM Clang 除了可用于 Windows 操作系统之外,主要用于 Unix/Linux 操作系统。
# MinGW-w64
MinGW的全称是:Minimalist GNU on Windows。它实际上是将经典的开源C语言编译器GCC移植到了Windows平台下, 并且包含了Win32API,因此可以将源代码编译为可在Windows中运行的可执行程序。 而且还可以使用一些Windows不具备的,Linux平台下的开发工具。一句话来概括:MinGW就是GCC的Windows版本 。
MinGW-w64与MinGW的区别在于MinGW只能编译生成32位可执行程序,而MinGW-w64则可以编译生成64位或32位可执行程序。 正因为如此,MinGW现已被MinGW-w64所取代,且MinGW也早已停止了更新。
MinGW-w64使用Windows的C语言运行库,因此编译出的程序不需要第三方DLL,可以直接在Windows下运行。
那些著名的开源
IDE实际只是将MinGW-w64封装了起来,使它拥有友好的图形化界面,简化了操作,但内部核心仍然是MinGW-w64。
MinGW一个自由开源的最小开发工具集:mingw-gcc编译工具链、mingw软件包管理器(mingw-get),用于开发Windows原生程序。 第一版的mingw-gcc是利用早期的Cygwin套件编译而成,这个过程和Cygwin系列(二):初窥Cygwin背后中Cygwin DLL构建类似, 随后mingw-binutils、mingw-make等其他工具链也都逐渐移植成功,MinGW逐渐完全脱离了Cygwin。
2005年,MinGW-w64项目基于MinGW创建,改善了MinGW的相关缺陷,并既支持32位程序又支持64位程序。MinGW-w64项目开发活跃,被很多Linux发行版采用为交叉工具链,而MinGW事实上已被抛弃。
可以把
MinGW视为MS Visual C++/Studio的开源替代品
# MinGW-w64下载
首先看到的是源码,要把页面滚动到最底部才能看到编译好的在线安装程序和离线压缩包
推荐离线安装,在线安装其实也是下载压缩包,而且众所周知的原因,国内通过在线安装非常缓慢

环境说明
- 系统架构
x86_64为64位操作系统i686为32位操作系统
- 操作系统接口协议(为哪种操作系统开发程序)
posix为Linux、Unix、Mac OS等其他操作系统win32为Windows操作系统
- 异常处理模型(64位)
seh是新发明的,性能比较好,但不支持32位操作系统sjlj是古老的,稳定性好,支持32位操作系统
- 异常处理模型(32位)
dwarf性能要优于sjlj,不支持64位操作系统sjlj稳定性好,支持32位操作系统
# MinGW-w64安装
- 如操作系统是
Windows10-X64并为posix接口协议开发程序,则选择:x86_64-posix-seh - 下载后把压缩包解压到指定盘符下,再添加到系统环境变量
path
- 如解压目录
C:\Program Files\mingw64,则在CMD执行
setx /m Path "%PATH%;C:\Program Files\mingw64\bin"
:: 查看添加变量是否成功
echo %PATH%
set PATH
查看版本
gcc -v && g++ -v
# MSYS2
MSYS是用于辅助Windows版MinGW进行命令行开发的配套软件包,提供了部分Unix工具以使得MinGW的工具使用起来方便一些。 如果不喜欢庞大的Cygwin,而且使用不多,可以试试。不过喜欢完整体验、不在乎磁盘占用等等,还是推荐Cygwin而不是MSYS。
MSYS和MinGW两者有较大的独立性。MSYS是Minimal SYStem的缩写,是一个基于Bourne Shell的命令行系统, 用于替代Windows中的cmd.exe,提供一个像Linux/UNIX的命令行环境。
MSYS是基于Cygwin早期版本(v1.3)发展而来,包含了少部分Linux/UNIX程序,没有编译工具链, 而且与Linux/UNIX原生程序或Cygwin程序相较丢失了很多功能特性,运行依赖于POSIX兼容层(msys-1.0.dll)。
如果没有
MSYS,在cmd中也可以正常运行MinGW程序,但MinGW和MSYS配合起来, 就组成了一个类似Linux/UNIX的、包含常用程序和完整开发工具的轻量但完备的系统环境,MinGW的安装路径可以挂载到MSYS目录树中任何位置。
MSYS项目仅支持32位程序,项目本身也发展缓慢。MSYS2基于最新版的Cygwin而创建,完全独立于MSYS而重写的版本 ,并既支持32位程序又支持64位程序,POSIX兼容层为msys-2.0.dll。MSYS2由msys2、mingw32、mingw64三个子系统组成,mingw32、mingw64对应于mingw-w64的32位和64位版本。 还有一个特色就是,MSYS2移植了Arch Linux中的包管理器pacman
MSYS2不完全是基于MinGW的,至少其原生工具都是链接到自带的一套特定版本的Cygwin DLL的。 基本上只是用libalpm管理MSYS2、MinGW-w64和MinGW三个不同子系统的软件包
- http://www.msys2.org (opens new window)
- https://github.com/msys2 (opens new window)
- msys2配置记录 (opens new window)
- 清华大学MSYS2镜像 (opens new window)
- 中国科学技术大学MSYS2镜像 (opens new window)
# MSYS2命令
pacman -S <packge-name>安装软件pacman -S mingw-w64-x86_64-make mingw-w64-x86_64-gcc
pacman -U <gz-file>安装本地包,其扩展名为pkg.tar.gzpacman -Syu同步Msys2源,并更新pacman -Sy仅同步源pacman -Su更新系统pacman -Sy <packge-name>同步源后再安装软件pacman -R <packge-name>该命令将只删除包,不包含该包的依赖。pacman -Rs <packge-name>在删除包的同时,也将删除其依赖。pacman -Rd <packge-name>在删除包时不检查依赖。pacman -Ss <keywords>这将搜索含关键字的包。pacman -Qi <packge-name>查看有关包的信息。
← Go