写在前面
- 环境:ubuntu16.04和gcc
hello.c //源代码文件(text文件)
hello.i //预处理之后的文件(text文件)
hello.s //汇编文件(text文件)
hello.o //二进制文件(ELF文件)
hello //可执行文件(ELF文件)
hello.c >(预处理)> hello.i >(编译)> hello.s >(汇编)> hello.o >(链接)> hello
gcc各种编译命令
gcc -E hello.c -o hello.i //预处理过程 hello.c-->hello.i
gcc -S hello.i -o hello.s //编译过程 hello.i-->hello.s
gcc -c hello.s //汇编过程 hello.s-->hello.o
gcc hello.o -o hello //链接过程 hello.o-->hello
gcc -S hello.c //直接生成汇编文件
gcc hello.c -o hello 直接生成可执行文件
程序编译过程简述
- 预处理过程是将hello.c中的头文件和宏定义替换等等,形成hello.i
- 编译过程是hello.i文件中的c语言语句替换成汇编语句等等,形成hello.s
- 汇编过程是将hello.s中的汇编语句替换成机器指令等等,形成目标文件hello.o
- 链接过程是将多个目标文件(这里只有一个目标文件hello.o,但是大工程k可能会有很多目标文件)和所需要的共享库链接拼合成一个可执行文件hello