gcc是c/c++的编译器,通常只能在 Linux 上才能用。如果我们要在windows上使用它,那么我们需要用MinGW来构建环境。让我们在Windows上也可以用gcc编译c代码,gcc与操作系统的api交互的地方mingw都与Windows API做了兼容处理。通过mingw的gcc编译出来的c/c++程序是可以原生在Windows上执行的。
下面是两种GCC环境的安装方式,一般只需要挑选其中一种安装即可,能用命令的地方我都会用命令处理,这样也能学到更多的知识点,文中系统环境版本为 Windows11
MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行库。你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。
Mingw-w64 是对原始 mingw.org
项目的改进,旨在支持 Windows 系统上的 GCC 编译器。为了提供对 64 位和新 API 的支持,它在 2007 年对其进行了分叉。从那时起,它得到了广泛的使用和分发。
https://www.mingw-w64.org/
下载页面上提供了 MingW-W64
及 MSYS32
下载链接
mingw-w64 源的压缩包托管在 SourceForge
上
SourceForge下载地址
https://sourceforge.net/projects/mingw-w64/files/mingw-w64/
列表下拉,找到 x86_64_win32-sjlj
或 x86_64_win32-seh
点击下载
SJLJ (setjmp / longjmp): 可用于32位和64位 – 不是“零成本”:即使不抛出exception,也会造成较小的性能损失(在exception大的代码中约为15%) – 允许exception遍历例如窗口callback
SEH (零开销exception) 将可用于64位GCC 4.8。
如果碰到无法下载请尝点击 Problems Downloading?
尝试其他地区的镜像源
下载完成后我们解压 x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0.7z
文件,提取到当前位置,我们将提取后得到的 mingw64
目录移动到D盘下
D:\mingw64\bin
目录中的文件就是我们需要的,因此我们需要把该目录添加到环境变量中去
以管理员权限打开CMD后输入下列命令,追加一条系统环境变量
setx path "%PATH%;D:\mingw64\bin" /M
在cmd窗口中输入gcc-v
查看版本信息,如下图所示则添加环境变量成功。
MSYS2是一个工具库,提供易于使用的环境,用于构建、安装和运行本机 Windows 软件。
它包括一个名为 mintty的命令行终端、bash、git 和 subversion 等版本控制系统、tar 和 awk 等工具,甚至 autotools 等构建系统,尽管其中一些核心部分基于 Cygwin,但 MSYS2 的主要重点是为本地 Windows 软件提供构建环境。MSYS2 为 GCC、mingw-w64、CPython、CMake、Meson、OpenSSL、FFmpeg、Rust、Ruby 等提供最新的原生构建环境。
为了提供简单的软件包安装和保持更新的方法,它提供了一个名为 Pacman的软件包管理系统,使用过Arch Linux 用户应该会非常熟悉。它的功能非常强大,例如对依赖关系的解析和完整系统升级,以及直接和可重复的包构建。它的资源库中包含2600 多个可以安装的预构建包。
https://www.msys2.org/
在官方网站中获取到下载链接后我们可以通过 powershell来进行下载安装,
wget -O msys2-x86_64.exe https://github.com/msys2/msys2-installer/releases/download/2022-06-03/msys2-x86_64-20220603.exe
cmd /c msys2-x86_64.exe
默认安装路径为 C:\msys64
安装完成后,通过开始栏菜单启动 MSYS2 的控制台 MSYS2 MSYS
在打开的控制台中输入以下命令更新包库
pacman -Syu
出现 以下选项时输入 Y 并按回车继
Proceed with installation? [Y/n]
To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]
重新打开 MSYS2 MSYS
控制台并输入下列命令,进行基础包更新
pacman -Su
出现下列提示, 键入Y并回车。
Proceed with installation? [Y/n]
等待所有的包更新完毕后接着就可以安装 MinGW-w64
构建包了
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
出现如下页面会让你选择安装哪些包,由于需要安装的包比较多 我这边就直接回车默认全部安装。
以管理员权限打开CMD后输入下列命令,追加一条系统环境变量
setx path "%PATH%;C:\msys64\mingw64\bin" /M
在cmd窗口中输入gcc-v
查看版本信息,如下图所示则添加环境变量成功。
我们在当前工作目录写创建一个新的 hello.c
notepad hello.c
hello.c 编写内容如下:
# include
int main()
{
printf("%s\n","hello world");
return 0;
}
输入命令编译成exe可执行文件
gcc hello.c -o hello.exe
在当前目录下会生成 hello.exe
的可执行文件,生成后输入 hello.exe
就可以执行了。
如果想调试程序,进入 gdb 的功能,使用 gdb 常用的命令就可以调试程序了,我们可以输入
gdb hello.exe
由于是系统环境变量,还是需要以管理员权限执行下列命令
rundll32.exe sysdm.cpl,EditEnvironmentVariables
双击Path
项,查看之前新增加的环境变量项是否存在,如果需要修改调整,可以在原来的设置上做修改,也可以删除后再增加,有重复的可以删除。