C/C++程序的基本编译流程:
test.c --预处理--test.i--编译--test.s--汇编--test.o--链接--test.exe
关于程序编译的一些规范和方法,首先把源文件编译程中间代码文件,Windows平台下是.obj文件,UNIX下是.o文件即Object File,这一动作叫做编译(compile);然后把编译得到的中间代码文件合成为可执行文件,这个动作叫做链接(link)。
编译时:编译器需要确定代码语法的正确,函数与变量声明的正确性。一般需要我们告诉编译器头文件的所在位置(头文件中声明,C/C++文件中定义),如果语法正确,编译器就可以编译出中间目标文件。一般情况下,每个源文件对应于一个中间目标文件。
链接时:链接函数和全局变量,可以使用中间目标文件来链接我们的应用程序。链接器只关心中间目标文件(Object File),如果源文件很多,编译产生的中间目标文件过多,而链接时需要指出中间目标文件名,这对于编译不方便,故需要给中间目标文件打包,Windows下这种包称为“库文件”(Library File),即.lib文件,UNIX下为Archive File,也就是.a文件。
总结:源文件首先编译为中间目标文件,链接中间目标文件生成可执行文件。编译时,编译器只检测语法,函数和变量是否被声明。如果函数未被声明,编译器会给出警告,但可以生成Object File。在链接程序时,连接器会在中间目标文件中找函数的实现,如果没找到,那就报链接错误(Linker Error)。
之后会介绍一下makefile