GNU
这个名字是GNU's Not Unix
的递归首字母缩写,它的发音为[g'noo]
,只有一个音节,发音很像"grew",但需要把其中的r
音替换为n
音。
GNU
是一个类Unix
操作系统。它是由多个应用程序、系统库、开发工具乃至游戏构成的程序集合。GNU
的开发始于1984年1月,称为GNU
工程。GNU
的许多程序在GNU
工程下发布,称之为GNU
软件包。
类
Unix
操作系统中用于资源分配和硬件管理的程序称为“内核”。GNU
所用的典型内核是Linux
。该组合叫作GNU/Linux
操作系统。GNU/Linux
为几百万用户所使用,然而许多人错误地称之为Linux
。
——以上引用自
GNU
官方网站。
简而言之,GNU
就是我们大家通常认知的Linux
。
GCC
,即GNU Compiler Collection
,GNU
编译器集合。GNU
编译器集合包括C
、C++
、Objective-C
、Fortran
、Ada
、Go
和D
的前端,以及这些语言的库(libstdc++
,…)。GCC
最初是作为GNU
操作系统的编译器编写的。GNU
系统被开发成100%的自由软件,在尊重用户自由的意义上是自由的。
—— 以上翻译引用自GCC
官方网站。
简而言之,GCC
就是在GNU
操作系统上使用的一种编译器。
minGW
即Minimalist GNU for Windows
。Mingw-w64
是原始 mingw.org 项目的延伸,旨在支持Windows
系统上的GCC
编译器。
简而言之,minGW
就是在Windows
系统上使用的GCC
编译器。
小白之所以要使用minGW
,主要原因是发现github
上很多源码工程需要使用Make
进行编译。如果想在Windows
系统上进行编译,就需要使用minGW
。
小白查阅了一些博客文章,发现之前的下载方式都指向sourceforge
,但是下载下来以后发现,这个链接的版本已经有些古老了。或者是下载下来以后发现其实是需要编译的源码。虽然说,GCC
本身具有“自举”(bootstrap)特点,即可以用较老的版本来编译新的版本。但是对于初次使用的小白来说就非常不友好了。毕竟这个“鸡生蛋,蛋生鸡”的问题,总得先从一只“鸡”,或者从一个“蛋”开始。
最简单的办法就是去查找它的源头。minGW的官方网站地址为http://mingw-w64.org
全英文的网站,让我们一个单词一个单词去找。在网站左侧,有一个Downloads
选项。
打开以后又是一大堆英文,绝大部分跟我们的目的不符,有很多跟Linux
系统下使用或者编译有关。但是在快接近页面底部的地方,我们找到WinLibs.com的描述。
Standalone MinGW-w64+GCC builds for Windows, built from scratch (including all depencencies) natively on Windows for Windows.
编译好的版本!正是我们想要的。
于是前往WinLibs.com看看。
在Release versions里可以找到各种版本。可以看到当前的最新版本可以到12.2.0。
注意到下载列表里有两种类型,一种是UCRT
运行时,另一种是MVSCRT
运行时。关于这个问题的选择,我们可以看到在这一段的上方不远,有一个解释:
MSVCRT
或UCRT
运行时库选择
传统上,
MinGW-w64
编译器使用MSVCRT
作为运行时库,该库在所有版本的Windows
上都可用。
由于
Windows 10
通用C运行时(UCRT
)可作为MSVCRT
的替代品。UCRT
也可以安装在早期版本的Windows
上(请参阅:Windows
中的UCRT
更新)。
除非您的目标是旧版本的
Windows
,否则UCRT
作为运行时库是更好的选择,因为它是为了更好地支持最新的Windows
版本以及提供更好的标准一致性而编写的(另请参阅:将代码升级到UCRT
)。
简而言之,MSVCRT
可以适用于所有的Windows
版本,而win10
及以上版本可使用UCRT
。官方推荐使用更好的UCRT
。
小白去查询了一下,UCRT
对应的是Visual Studio 2015
以上的版本。
下载下来之后这其实是一个免安装版本,跟之前的exe用法并不相同。所以以下记录一下配置的方式。在WinLibs.com上是有说明的。
打开CMD(最好以管理员身份打开),确保提取的mingw32/bin或mingw64/bin文件夹位于PATH中,并且其位置不包含任何空格。
小白下载的是最新版本的64位。打算放在D盘,所以以下代码可以设置好它的临时环境变量:
SET PATH=D:\winlibs-x86_64-posix-seh-gcc-12.2.0-llvm-15.0.7-mingw-w64ucrt-10.0.0-r4\mingw64\bin;%PATH%
测试1:看一下当前的版本:
gcc --version
结果为
gcc (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
但是小白发现,这种临时设置的方式,只要你重新打开CMD就等于白设了。保险起见还是在环境变量里设置成永久的。
来个HelloWorld
notepad helloworld.c
内容填个
#include int main ()
{printf("Hello world!\n");return 0;
}
用GCC编译一下:
gcc -o helloworld.exe helloworld.c
或者分步编译:
gcc -c -o helloworld.o helloworld.c
gcc -o helloworld.exe helloworld.o
结果不出意外:
Hello world!
至此我们配置成功了,后面就可以开始在Windows上编译用Make编译的C/C++工程。