gcc是一个编译器,将我们写的高级语言转化成机器语言
gcc如何完成
格式:gcc [选项] 要编译的文件 [选项] [目标文件]
gcc编译过程
- 预处理(进行宏替换):展开所有代码
gcc -E
例:gcc -E main.c -o main.i
-o是重命名,使main.c预处理后生成的文件名叫main.i - 编译(生成汇编):纠错,没有错误则将程序编译成汇编代码
gcc -S
例:gcc -S main.i -o main.s
-o是重命名,使main.i预处理后生成的文件名叫main.s - 汇编(生成机器可识别的代码):将汇编代码编译成机器可识别的代码
gcc -c
例:gcc -c main.s -o main.o
-o是重命名,使main.s预处理后生成的文件名叫main.o - 链接(生成可执行文件或库文件):将别人已经实现的代码拿过来,和我们的程序在一起生成最终的一个可执行程序
例:gcc main.o -o main
在前边3步中,只是将我们写的代码编译成机器语言,但是在我们的代码中有很多的调用函数,这些函数不是我们实现的,但是我们要生成最终的可执行程序,就必须在我们的代码中能够知道这些函数的实现。
要知道这些函数的实现,就要用到链接了,也就是第4步。
动态链接:记录函数地址信息,并不是将代码全部拿过来,所以可执行程序比较小。
静态链接:将库中的代码写入我们的函数中,最终生成的文件比较大,但运行时不需要依赖库。
gcc默认是动态链接。