编译原理入门(一):GNU编辑器(GCC)原理简介
GCC的编译工程可以分为四个步骤:GCC编译过程中,每个步骤都会生成不同的文件格式,下表列举了C/C++在编译过程中生成的文件类型:✨GCC的基本用法如下所示,使用GCC编译器我们需要关注两个方面:调用参数(操作方法)和文件名称(操作对象)。其中,:GCC编译器的调用参数;:操作的文件对象。在Linux系统上,我们可以通过终端直接查看GCC的英文帮助手册,如果应以水平好的话,可以经常查看GCC的手
编译原理入门(一):GNU编译器(GCC)原理简介
- 💫 GNU编译器(GCC, GNU Compiler Collection)是GNU工具链的关键组件,与GNU、Linux相关项目的标准编译器。它设计之初仅用来处理C语言的(也被称为GNU C编译器),紧接着扩展到C++、Objective-C/C++、Fortran、Java、Go等编程语言。
- 💫 目前,GCC已经被以知道各种指令集体系结构中,成为了自由软件、专有软件的开发工具。GCC编译器可以应用多种平台:操作系统(Linux/Windows)、移动端(Android/iSO)、嵌入式系统(Arm/FPGA)等。
📘 1. GNU编译器(GCC)的编译过程
GCC的编译工程可以分为四个步骤:
- 1️⃣ 预处理(Pre-Processing):使用CPP对C语言源程序进行预处理生成预处理
.i
文件,在该过程主要对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析; - 2️⃣ 编译(Compiling):调用CC1将预处理后的
.i
文件编译汇编语言.s
文件,这个阶段主要是对预处理文件进行转换以生成机器语言的目标程序; - 3️⃣ 汇编(Assembling):GCC调用AS对汇编语言
.s
文件进行汇编,生成目标文件.o
; - 4️⃣ 链接(Linking):GCC调用LD将各个模块的
.o
文件连接起来生成一个可执行程序文件,该过程将目标文件/库文件指派到可执行程序各自对应的位置。
GCC编译过程中,每个步骤都会生成不同的文件格式,下表列举了C/C++在编译过程中生成的文件类型:
文件后缀 | 描述 |
---|---|
.c | C语言源文件 |
.C/.cc/.cxx/.cpp | C++ 源文件 |
.h | C/C++ 头文件 |
.i/.ii | 经过预处理的 C/C++ 文件 |
.s/.S | 汇编语言源文件 |
.o/.obj | 静态库 |
.so/.dll | 动态库 |
- 我们可以根据自己的需要控制GCC的编译过程和中间文件,以便检查、调试和优化程序。下图给出了C语言随着编译过程生成的文件类型。
📘 2. GNU编译器(GCC)的使用方法
✨ GCC的基本用法如下所示,使用GCC编译器我们需要关注两个方面:调用参数(操作方法)和文件名称(操作对象)。
gcc [options] [filenames]
其中,options
:GCC编译器的调用参数;filenames
:操作的文件对象。
- GCC的调用参数有很多,常用的参数如下表所示:
命令 | 作用 |
---|---|
-c | 只进行编译过程,而不链接成可执行文件,编译器只是将输入的源代码 ( .c/c++ 、java 、python 等)生成.o 为后缀的目标文件(objective file) |
-g | 生成符号调试工具(GNU的gdb)所需要的符号信息。 |
-E | 仅执行预处理操作,而不进行编译、汇编和链接操作 |
-S | 仅执行编译操作,而不进行汇编、链接操作 |
-O | 对程序进行优化编译、链接操作,提高可执行文件的执行效率 |
-o file_name | 设置输出文件名为file_name ,注意输出文件名不能和源文件同名;如果不给出该调用参数, gcc 就给出默认的可执行文件a.out |
📖 GCC的外部结构遵循Unix约定,用户调用特定语言的驱动程序解释命令参数,生成完整的可执行二进制文件。
📖 每种编程语言的编译器都是一个单独的程序,读取源代码并输出机器码;每种编程语言的前端都会解析该语言的源代码,最终生成一个抽象的语法树。
📘 3. GNU编译器(GCC)手册使用方法
在Linux系统上,我们可以通过终端直接查看GCC的英文帮助手册,如果应以水平好的话,可以经常查看GCC的手册。在终端输入man gcc
即可打开:
手册中给出的介绍比任何资料都详细准确,但是非常的长1.6万行。快速浏览手册的快捷键与vim很相似如下表格所示:
快捷键 | 作用 |
---|---|
g/G | 跳转到文档顶/底部 |
u/d | 向上(up)/下(down)翻动半页 |
f/b | 向上(forward)/下(backward)翻动一页 |
/ | 在文档中搜索内容,按下/ 在后面输入想要查询的内容 |
n/N | 跳转到下/上一个搜索的内容 |
q | 退出手册 |
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)