gcc 常用命令(逐渐完善)
首先适用一个简单的示例程序,如下:
//test.c #include <stdio.h> int main(void) { printf("Hello gcc!\n"); }
这个程序直接编译使用
gcc test.c -o test
即可,其中-o的意思是生成后面的文件。
而实际上编译过程是分为以下几个子过程的:
- 预处理(Preprocessing)
- 编译(Compilation)
- 汇编(Assembly)
- 链接(Linking)
我们可以一步一步执行,来观察每一步结果
1、预处理过程(Preprocessing):
gcc -E test.c -o test.i 或 gcc -E test.c
这步可以输出test.i文件,存放test.c讲过预处理之后的代码。
如果时候后者,则直接在命令窗口显示预处理的结果。
gcc的-E选项可以让编译器在预处理后就停止,并输出结果。
2、编译为汇编代码(Compolation)过程:
通过对预处理结果test.i文件进行编译,可以生成汇编代码
gcc -S test.i -o test.s
gcc 的-S选项表示在程序编译期间,在生成汇编代码后停止,-o输出汇编代码文件
3、汇编过程(Assembly):
对于上一届段生成的test.s 文件,gas汇编器负责将其编译为目标文件,如下:
gcc -c test.s -o test.o
在这个生成文件中我们已经没有办法在详细看了,因为它已经是二进制代码
4、链接过程(Linking):
gcc 链接器是gas 提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终形成执行文件,包含静态链接库和动态链接库。
对于上一阶段生成的test.o文件,将其与C标准输入输出库进行链接,最终生成test
gcc test.o -o test
在命令阶段即可运行./test来输出结果了。