【Linux下gcc编译的四个过程】

文章详细介绍了编译过程的四个步骤:预处理(处理宏定义、条件编译和#include指令)、编译(生成汇编代码)、汇编(汇编成机器代码)和链接(组合目标文件与库,生成可执行文件)。预处理会删除注释和添加行号,编译器进行语法分析和优化,而链接器确保所有依赖项正确结合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

在这里插入图片描述

编译共分为四个流程:
1、预处理
2、编译
3、汇编
4、链接

在这里插入图片描述

相关命令

在这里插入图片描述
下图是多个文件一起编译的情况:
在这里插入图片描述

预处理

#define two 1//宏定义

//条件编译
#ifdef two
    //如何宏定义了two则执行这里面的代码
#endif


#include “stdio.h”//文件包含

gcc -E hello.c -o hello.i
预编译过程主要处理那些源代码中以#开始的预编译指令,主要处理规则如下:

  • 将所有的#define删除,并且展开所有的宏定义;

  • 处理所有条件编译指令,如#if,#ifdef等;

  • 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。

  • 删除所有的注释。

  • 添加行号和文件标识,如#9 “usart.c” 9,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息;

编译

gcc -S hello.i -o hello.s

编译器会将预处理完的 .i 文件进行一些列的语法分析,并优化后生成对应的汇编代码。会生成 .s 文件

汇编

gcc -c hello.s -o hello.o

汇编器会将编译器生成的 .s 汇编程序汇编为机器语言或指令,也就是可以机器可以执行的二进制程序。会生成 .o 文件。

链接

gcc hello.o -o hello

链接器会来链接程序运行的所需要的目标文件,以及依赖的库文件,最后生成可执行文件,以二进制形式存储在磁盘中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值