整个过程将高级语言翻译成了机器语言,而编译器 就是这样的一个工具。GCC可以完成从预处理、编译、汇编、链接整个过程。但是平时使用Visual Studio等软件时并没有接触到这个过程,因为VS是集成开发环境(IDE、Integrated Development Environment),集成了代码编辑器,编译器,调试器和图像化用户界面,上述所有程序编译和链接过程都用一步build构建带过了。
<math xmlns="http://www.w3.org/1998/Math/MathML"> Ⅰ . 编译器 G C C 、 c l a n g : 如有疑问可留言沟通交流 Ⅰ. 编译器 GCC、clang:^{如有疑问可留言沟通交流} </math>Ⅰ.编译器GCC、clang:如有疑问可留言沟通交流
Ⅰ.1 GNU 的 GCC/G++
GNU 计划,是由理查德·斯托曼在1983年9月27日公开发起的,目标是创建一套完全自由的操作系统。而 GNU 是一个类 Unix 操作系统。它是由多个应用程序、系统库、开发工具乃至游戏构成的程序集合。GNU 的开发始于 1984 年 1 月,称为 GNU 工程。GNU 的许多程序在 GNU 工程下发布;我们称之为 GNU 软件包。 GCC(GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言编译器,以 GPL 及 LGPL许可证所发行的自由软件,也是 GNU 工具链的主要组成部分之一。GNU编译器套件包括 C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等)。GCC的初衷是为 GNU 操作系统专门编写的一款编译器,支持的处理器架构: ARM、x86、x86-64、MIPS、PowerPC等,因此 GCC 通常是跨平台软件的编译器首选。
gcc 是 GCC 中的 GUN C Compiler (C 编译器)
g++ 是 GCC 中的 GUN C++ Compiler(C++编译器)
一个有趣的事实: 就本质而言,gcc 和 g++ 并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的 GUN编译器。更准确的说法是:gcc 调用了 C compiler,而 g++ 调用了 C++ compiler。比如,用gcc编译一个c文件的话,会有以下几个步骤:
vbnet复制代码
Step1:Call a preprocessor, like cpp.
Step2:Call an actual compiler, like cc or cc1.
Step3:Call an assembler, like as.
Step4:Call a linker, like ld
-g - turn on debugging (so GDB gives morefriendly output)
-Wall - turns on most warnings
-O or -O2 - turn on optimizations
-o - name of the output file
-c - output an object file (.o)
-D - specify a macro definition
-E - just Preprocess the specified file
-S - just Compile the specified file
-c - just Assembling the specified file
-I - specify an includedirectory
-L - specify a libdirectory
-l - link with librarylib.a
libc++和libc++ABI项目 提供了一个符合标准的 C++ 标准库的高性能实现,包括对 C++11 和 C++14 的完全支持。
编译器rt项目 提供了低级别代码生成器支持例程(如__fixunsdfdi)的高度调优实现,以及当目标没有短序列的本机指令来实现核心 IR 操作时生成的其他调用。它还为动态测试工具(如AddressSanitizer、ThreadManitizer、MemoryManitizer和DataFlowSanitizer)提供了运行时库的实现。
<math xmlns="http://www.w3.org/1998/Math/MathML"> Ⅱ M i n g w / M S V C 和 M a k e / C M a k e : 如有疑问可留言沟通交流 Ⅱ Mingw / MSVC 和 Make / CMake:^{如有疑问可留言沟通交流} </math>ⅡMingw/MSVC和Make/CMake:如有疑问可留言沟通交流
Ⅱ.1 Windows平台下的 Mingw / MSVC
MinGW (Minimalist GNU for Windows)是一个可自由使用和自由发布的 Windows 特定头文件和使用 GNU 工具集导入库的集合,允许在 Windows 平台生成本地的 Windows 程序而不需要第三方 C 运行时(C Runtime)库。
运行时库:支持程序运行的基本函数的集合,一般是静态库 lib 或动态库 dll。
MSVC,Microsoft Visual C/C++ Compiler) 就是微软(MS)的VC运行库,由微软开发的 VC运行时库,被 Visual Studio IDE 所集成,因此使用VS时会附带MSVC编译器。Windows 很多程序在编制的时候使用了微软的运行库,这将大大减少了软件的编码量,提高了兼容性。
因此,MinGW 和 MSVC都是 Windows C/C++ 语言编译支持,配置环境时遇到两者择其一即可。