一、程序编译原理
- 程序编译一般分为四个步骤,最后生成一个可执行的文件:
- 注意事项:
- ①在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但仍可以生成Object File。但是链接时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码
- ②一个.c文件只生成一个.i和.s和.o文件,链接时是将所有的.o文件一起链接
- ③.h文件不直接参与源码编译,.cpp/.c等参与源码编译
- ④承上,因为.h文件不参与源码编译,所以在.h文件中不要写带内存的代码
二、各种后缀名文件的意义
- .c:C语言源代码文件
- .h:是程序所包含的头文件
- .i :预处理过的C源代码文件
- .s:是汇编语言源代码文件
- .o:是汇编之后的目标文件
- .S:是经过预编译的汇编语言源代码文件
三、演示案例
- 将一个hello.c文件进行预处理、编译、汇编、链接
第一步:预处理
gcc -E -o hello.i hello.c
- .i文件内容为:将.c里面用到的#include和宏定义的代码替换之后的代码文件
第二步:编译
gcc -S -o hello.s hello.i
- .s里面是汇编语言
第三步:汇编
- 编译生成一个二进制文件
gcc -c -o hello.o hello.s
第四步:链接
- 链接生成一个可执行文件
gcc -o hello hello.o
第五步:
- 执行生成的hello可执行文件,打印出内容
./hello