解剖GCC编译器原理

解剖GCC编译器原理
编译过程流程如图所示


1. 预处理过程:
预处理过程就是解析源程序过程中有文件包含,宏定义、条件编译,如#include,#define, #if等。把文件包含语句所指定的文件所包含进来,覆盖原来的#include语句,所有的宏定义都被展开。并且在预处理阶段将文件的注释给去除,把语句行号添加进来。
想通过预处理来查看预处理文件是否顺利展开可以使用如下指令:

 gcc hello.c -o hello.i
1
2.编译过程
编译过程也称为汇编过程,这个过程是将c语言程序转译为汇编语言。编译过程包括词法和语法的分析,最终生成对应硬件平台的汇编语言,具体平台由具体平台的编译器来实现。
想获取到相应汇编代码可以通过如下指令来实现:

 gcc hello.i -o hello.s -S
3.汇编
将汇编程序翻译成为可重定位文件,汇编指令跟处理器直接运行的二进制指令流之间基本是一一对应的关系。可以通过如下指令来生成:

gcc hello.s -o hello.o -c
4.链接
链接到语言库中相应的文件,可通过如下相应的指令实现:

gcc hello.o -o hello


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gcc是一款开源的编译器,它可以将C、C++、Objective-C等高级语言编写的源代码转换成可执行文件。gcc编译器的工作原理可以分为四个阶段:预处理、编译、汇编和链接。 1. 预处理阶段:在这个阶段,gcc会对源代码进行预处理,主要包括以下几个步骤: - 处理头文件:将#include指令所包含的头文件内容插入到源代码中。 - 宏替换:将源代码中的宏替换成宏定义所对应的内容。 - 条件编译:根据#if、#ifdef、#ifndef、#else、#elif和#endif指令来判断哪些代码需要编译,哪些代码需要忽略。 - 去注释:将源代码中的注释删除。 2. 编译阶段:在这个阶段,gcc会将预处理后的源代码转换成汇编代码,主要包括以下几个步骤: - 词法分析:将源代码分解成一个个单词。 - 语法分析:将单词组成语句,并检查语法是否正确。 - 语义分析:检查语句是否有意义,如变量是否定义过等。 - 中间代码生成:将源代码转换成中间代码。 3. 汇编阶段:在这个阶段,gcc会将汇编代码转换成机器码,主要包括以下几个步骤: - 语法分析:将汇编代码分解成指令和操作数。 - 语义分析:检查指令和操作数是否有意义。 - 目标代码生成:将汇编代码转换成目标代码。 4. 链接阶段:在这个阶段,gcc会将目标代码和库文件链接成可执行文件,主要包括以下几个步骤: - 符号解析:将目标代码中的符号(如函数名、变量名等)与库文件中的符号进行匹配。 - 重定位:将目标代码中的地址与库文件中的地址进行匹配。 - 可执行文件生成:将目标代码和库文件链接成可执行文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值