在Linux 下使用gcc来编译程序时,只需使用:(假设源代码文件的文件名为main.c)
gcc main.c
./a.out
然而该过程可分解为四步:预处理、编译、汇编、链接。
1.预处理:gcc -E main.c -o main.i
生成 .i 文件
删除注释,处理预处理指令,将包含的头文件展开
2.编译:gcc -S main.i (gcc -S main.i -o main.s)
生成 .s 文件
词法分析、语法分析、语义分析
3.汇编:gcc -c main.s
生成 .o 文件,
或使用gcc命令:gcc -c main.c -o main.o
从源代码文件开始,经过预编译、编译、和汇编直接输出目标文件 .obj
将汇编指令翻译成二进制生成符号表,生成各种段
4.链接:gcc main.o 生成 a.out 最终可执行文件
gcc main.o -o main
链接的主要内容是把各个模块之间相互引用的部分都处理好,使得各个模块之间能够正常的衔接。链接的主要过程包括地址和空间分配、符号决议和重定位等。