gcc编译
写好的代码如何变成一个可执行程序的呢?
总共分四步:
预处理—-编译—-汇编—-链接
每一步如何实现:
- 预处理:
gcc -E test.c -o test.i - 编译:
gcc -S test.c -o test.s - 汇编:
gcc -c test.c -o test.o
这里:我们可以通过file命令查看得到test.i,test.s,test.o三个文件的类型。
- .i文件是c文本文件
- .s文件是汇编文本文件
- .o文件是可重定位文件
- a.out文件是可执行文件
通过命令:gcc -v test.c可以查看.c文件编译链接的过程
在这里我们可以得到:
- cc1:编译器
- as:汇编器
- collect2:链接器
这里的cc1编译器实际上就是用来编译代码的编译器,而gcc相当于一个外壳,实际起作用的是cc1.
选项
- -E 仅作预处理,不进行编译、汇编和链接。
- -S 仅编译到汇编语言,不进行汇编和链接。
- -c 编译、汇编到目标代码,不进行链接
- -o文件输出到文件
- -g生成调试信息
- -O0
- -O1
- -O3:优化级别
- -w不生成任何警告
- -Wall生成所有警告