GCC 编译器的编译流程是:
预处理-->编译-->汇编-->链接
-
预处理就是展开所有的头文件、 替换程序中的宏、解析条件编译并添加到文件中。
-
编译是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。
-
汇编就是将汇编语言文件编译成二进制目标文件。
-
链接就 是将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件,链接的时候还会涉 及到静态库和动态库等问题
一般讲的编译就是生成可执行的二进制文件,默认是.o文件。
例如:单个main.c的文件可以进行如下编译,生成a.out可执行文件,然后直接运行./a.out就可以输出hello world了:
也可以通过使用参数“-o”来指定 编译生成的可执行文件名字:
以上都只有一个文件,而且文件非常简单,因此可以直接使用 gcc 命令生成可执行文件,并没有先将 c 文件编译成.o 文件,然后再链接在一起。
如果是多个c文件呢?
上述命令前三行分别是将 main.c、input.c 和 calcu.c 编译成对应的.o 文件,所以使用了“- c”选项,“-c”选项就是只编译不链接。最后一行命令是将编译出来的所有.o 文件链接成可执行文件 main。
当然也可以合并写:
使用 gcc 编译器对 main.c、calcu.c 和 input.c 这三个文件进行编译,编译生成的可执行文件叫做 main.