- 第一个源文件
- 编译作用
- 编译过程
- 预处理
- 终端命令
- 作用
- 编译
- 终端命令
- 作用
- 汇编
- 终端命令
- 作用
- 链接
- 终端命令
- 作用
- 总命令
hello.c
#include编译作用int main(void) { printf("Hello world"); }
计算机并不能直接执行上面的源文件,需要通过编译器进行编译,转化为二进制可执行文件之后,计算机才能读懂程序并执行。
编译过程总共四步:
- 预处理(preprocessing)
- 编译(compiling)
- 汇编(assembling)
- 链接(linking)
gcc -E xxx.c -o xxx.i
-E,-o以及下面的-S、-c是都命令行参数,能够改变gcc命令的功能。而-o代表output,后面跟着所要生成输出的文件的文件名
作用- 头文件展开。 — 不检查语法错误。 可以展开任意文件。
- 宏定义替换。 — 将宏名替换为宏值。
- 替换注释。 — 变成空行
- 展开条件编译 — 根据条件来展开指令。
预处理之后的hello.i:
编译 终端命令gcc -S xxx.i -o xxx.s
作用-
逐行检查语法错误。— 整个编译4步骤中最耗时的过程。
-
将C程序翻译成 汇编指令,得到.s 汇编文件。
编译后的hello.s:
汇编 终端命令gcc -c xxx.s -o xxx.o
作用- 将汇编指令翻译成对应的二进制编码。
Windows gcc xxx.o -o xxx.exe
Linux gcc xxx.o -o xxx
作用- 数据段合并
- 数据地址回填
- 库引入
- 生成可执行文件
Windows:gcc xxx.c -o xxx.exe
Linux:
make xxx
gcc xxx.c -o xxx



