Table of content
0 Preface/Foreword
1 MinGW-w64
1.1 使用MinGW-w64的原因
1.2 MinGW-w64使用场景
1.3 官网
2 GCC & LLVM
2.1 编译器构成
2.2 GCC
2.3 LLVM
2.3.1 Clang
0 Preface/Foreword
MInGW全称为:Minimalist GNU on Windows.将经典的开源C语言编译器GCC移植到了Windows平台下,并且包含了Win32API,因此可以将源代码编译为在Windows中运行的可执行程序。
而且还可以使用一些Windows不具备的,Linux平台下的开发工具。概括来讲:MinGW 是GCC的Windows版本。
MinGW-w64与MinGW的区别:
- MinGW只能编译生产32位可执行程序;
- MinGW-w64可以编译成64bit或者32bit可执行程序
1 MinGW-w64
1.1 使用MinGW-w64的原因
讲原因我们就可以从它的优势说起:
- 开源软件,可以免费使用
- 是一个活跃的开源社区在维护,不会过时
- 支持最新的C语言标准
- 使用Windows的C语言运行库,因此编译出的程序不需要第三方DLL,可以直接在Windows下运行
- 流行的IDE本质上是将MinGW-w64进行了封装,使得具有良好的GUI,简化了操作,但是内部的核心还是MinGW-w64
- 是稳定的、可靠的、持续更新的C/C++编译器,使用可以免去很多麻烦,不用担心过时,也不用担心编译器本身有bug
1.2 MinGW-w64使用场景
- 对于C语言初学者,适合用MinGW-w64,因为可以知道编译程序的细节
- 相比于VS2015等编译器,MinGW-w64属于手动编译,而VS2015属于自动编译
1.3 官网
https://www.mingw-w64.org/
2 GCC & LLVM
2.1 编译器构成
传统编译器分为三个部分:
- Frontend,前端:语义(Semantic)和语法(Syntax)分析,将源代码转换成抽象语法树(Abstract Syntax Tree);
- Optimizer,优化器:在前端基础上,对中间代码进行优化;
- Backend,后端:将优化后的中间代码转化为针对各自平台的机器代码;
2.2 GCC
GCC,GNU Compiler Collection,GNU编译器套装,一套由GNU开发的编程语言编译器。GCC原名GNU C语言编译器,刚开始只能编译C语言。后来GCC经过扩展,可以处理C++、Objective-C、Java等其他语言。
2.3 LLVM
LLVM:Low Level Virtual Machine,底层虚拟机,提供与编译器相关支持,能够进行程序语言的编译器优化、链接优化、在线编译优化、代码生成,可以作为多种编译器的backend使用。
2.3.1 Clang
Clang是LLVM的frontend,只支持C、C++和Objective-C三种语言。