在使用GCC进行程序的编译时通常要经历四个阶段(通常指的是从源程序到可执行的二进制代码这整个过程),一些以hello.c为例来说明这四个阶段。
hello.c
#include<stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
GCC的四个阶段如下:
1.预处理阶段
2.编译阶段
3.汇编阶段
4.链接阶段
四个阶段的详细信息如下:
1.预处理阶段
执行程序:cpp
作用:(1)展开源程序中定义的宏。(2)在源程序中插入include所包含的文件等
执行方法:gcc –E hello.c –o hello.i
执行结果:后缀名为.i的文件,如hello.i
2.编译阶段
执行程序:ccl作用:检查代码的规范性、是否具有语法错误等,并把预处理的文件编译成可读汇编代码。
执行方法:gcc –S hello.i –o hello.s
执行结果:后缀名为.s的文件,如hello.s
3.汇编阶段
执行程序:as作用:把汇编阶段生成.s文件汇编成具体cpu上的目标代码。
执行方法:gcc –c hello.s –o hello.o
执行结果:生成后缀为.o的文件,如hello.o
4.链接阶段
执行程序:ld
作用:把汇编阶段生产的.o文件与相关的目标代码进行链接,生产可执行的二进制文件
执行方法:gcc hello.o –o hello
执行结果:生成可执行的二进制文件,如hello
总结:
| 阶段 | 程序 | gcc选项 | 输入文件 | 输出文件 |
| 预处理 | cpp | -E | .c或者其他(hello.c) | .i(hello.i) |
| 编译 | ccl | -S | .i(hello.i) | .s(hello.s) |
| 汇编 | as | -c | .s(hello.s) | .o(hello.o) |
| 链接 | ld | 无 | .o(hello.o) |
本文深入探讨了使用GCC编译器将源代码转换为可执行文件的过程,详细阐述了预处理、编译、汇编和链接四个阶段的执行流程和关键步骤。
1772

被折叠的 条评论
为什么被折叠?



