GCC 编译步骤

博客详细介绍了C程序的编译过程,包括预处理,如头文件展开、宏定义替换等;编译,逐行检查语法错误并翻译成汇编指令;汇编,将汇编指令翻译成二进制编码;链接,进行数据段合并、地址回填和库引用。

1、预处理

  1. 头文件展开(不检查语法错误)
  2. 宏定义替换
  3. 替换注释
  4. 展开条件编译
gcc -E xxx.c -o xxx.i

2、编译

gcc -S heelo.i -o hello.s
  1. 逐行检查语法错误
  2. 将C程序翻译成 汇编指令,得到.s汇编文件

3、汇编

翻译:将汇编指令翻译成对应的二进制编码

gcc -c helo.s -o hello.o

4、链接

  1. 数据段合并
  2. 数据地址回填
  3. 库引用
gcc hello.o -o hello.exe
### GCC 编译步骤及作用 GCC(GNU Compiler Collection)编译一般分为四个步骤:预处理、编译、汇编和链接,各步骤作用如下: 1. **预处理**:处理源代码中的预处理指令,如 `#include`、`#define` 等。它会将头文件包含进来,展开宏定义,删除注释等,生成一个中间文件,通常以 `.i` 为扩展名。这一步使得代码更加清晰,便于后续编译处理。 2. **编译**:将预处理后的文件进行语法分析、语义分析、代码优化等操作,把高级语言代码转换为汇编代码。汇编代码是一种更接近机器语言的中间形式,通常以 `.s` 为扩展名。这一步将高级语言的逻辑转换为机器可以理解的基本操作序列。 3. **汇编**:把汇编代码翻译成机器可以执行的二进制目标文件,通常以 `.o` 为扩展名。目标文件包含了机器指令和数据,但还不能直接运行,因为它可能引用了其他目标文件或库中的函数和变量。 4. **链接**:将多个目标文件和所需的库文件链接在一起,生成一个可执行文件。链接过程会解决目标文件之间的符号引用问题,将各个部分组合成一个完整的程序。 ### 具体操作方法 以下是使用 GCC 进行编译的具体命令示例: ```bash # 预处理 gcc -E source.c -o source.i # 编译 gcc -S source.i -o source.s # 汇编 gcc -c source.s -o source.o # 链接 gcc source.o -o executable ``` 在上述命令中,`source.c` 是原始的 C 语言源文件,`source.i` 是预处理后的文件,`source.s` 是编译后的汇编文件,`source.o` 是汇编后的目标文件,`executable` 是最终生成的可执行文件。 也可以将这四个步骤合并为一个命令: ```bash gcc source.c -o executable ``` 这个命令会自动完成预处理、编译、汇编和链接的所有步骤,直接生成可执行文件。 此外,还可以使用 `-D` 选项在编译时添加宏定义,例如: ```bash gcc -DDEBUG -DWEATHER source.c -o executable ``` 这样在编译时会定义 `DEBUG` 和 `WEATHER` 宏,程序中的相应 `#ifdef` 语句会根据这些宏的定义情况进行不同的输出 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值