前言
简单介绍gcc编译器编译步骤。
一、编译步骤
hello.c(示例):
#include <stdio.h>
int main(void)
{
printf("HelloWorld\n");
return 0;
}
-
预处理:就是将源文件中包含的头文件内容全部拷贝到源文件的过程,预处理命令:gcc -E -o 预处理文件.i 源文件.c(切记:-o选项后面永远跟要新生成的文件)
gcc -E -o hello.i hello.c
将hello.c进行预处理生成hello.i,这里是将stdio.h文件的内容拷贝到源文件,通过vim hello.i 可以发现main函数前面多了许多内容,这正是stdio.h的代码。
-
只编译不链接:将预处理文件.i单独翻译生成可执行文件,但是此时不包含标准C库函数代码,例如:printf,所以此时生成的可执行文件不能运行。gcc命令:gcc -c -o 可执行文件.o 预处理文件.i
gcc -c -o hello.o hello.i
将hello.i进行编译生成hello.o,此时vim hello.o会发现内容是乱码,这是gcc编译之后的二进制机器语言。但此时文件还不能执行,因为hell.o只是通过include <stdio.h>外部声明了printf函数,但是具体printf的实现在外面一个库文件里面,比如printf.o。
-
链接:将自己的目标文件与其他的库文件或者目标文件.o合并在一起最终生成执行文件.out,gcc命令:gcc -o 可执行文件 可执行文件.o 或者 预处理文件或者源文件.c
gcc -o hello hello.o
链接器将printf.o并入hello.out,此时可执行文件能够被执行,./hello能够执行
总结:可以将三个步骤直接一步生成gcc命令:gcc -o 可执行文件 目标文件.o
gcc -o hello hello.c