程序编译详情过程
程序员文章站
2022-04-01 20:13:30
在运行一个程序时,事实上经过了预编译,编译,汇编,链接四个过程。只不过我们在运行程序时,这些步骤被隐藏了。
①预编译:
把源代码文件如main.c,被预编译成一个.i文件。在l...
在运行一个程序时,事实上经过了预编译,编译,汇编,链接四个过程。只不过我们在运行程序时,这些步骤被隐藏了。
①预编译:
把源代码文件如main.c,被预编译成一个.i文件。在linux下的命令为:
gcc-E main.c -o main.i
预编译的具体任务:
1.将所有的“#define”删除,并展开所有的宏定义。
2.处理所有条件预编译指令。
3.处理头文件预编译指令,将被包含的文件插入到该预编译指令的位置。
4.删除所有的注释。
5.添加行号和文件名标识。
6.保留所有的#pragma编译器指令,因为编译器需要使用它们。
预编译的作用:
经过预编译后的.i文件不包含任何宏定义,并且包含的文件也已经被插入到.i文件中。当我们无法判断宏定义是否正确或头文件包含是否正确时,可以查看预编译后的文件夹来确定问题。
②编译:
把预编译后的文件如main.i,编译成.s文件。在linux下的命令为:
gcc-S main.i -o main.s
编译的具体任务:
把预编译完的文件进一步的进行一系列的语法,词法,解析检查。
③汇编:
把编译后的文件如main.s,汇编成.o文件。在linux下的命令为:
gcc-c main.s -o main.o
汇编的具体任务:
通过汇编代码转化为机器可以执行的指令。
④链接
把汇编后的文件如main.o,链接成.exe可执行文件。在linux下的命令为:
gcc main.o -o main
链接的具体任务:将不同部分的代码和数据收集组合为一个单一文件的过程。