在Linux系统中可执行文件没有统一的后缀,系统是通过文件的属性来区分可执行文件和不可执行文件。用gcc编译生成的可执行文件,若编译时没有指明可执行文件的名字,gcc将生成一个名为a.out的文件。
.c :是C语言源代码文件
.a :由目标文件构成的档案库文件(静态库文件)
.C、.cc、.cpp、.C++、.cp、.cxx :C++源码文件
.h :程序包含的头文件(适用于C,C++,Objective-C,Objective-C++)
.hh,.H,.hp,.hxx,.hpp,.HPP,.h++,.tcc :C++头文件
.i :已经预处理过的C源代码文件
.ii :已经预处理过的C++源代码文件
.m :Objective-C源代码文件(Note that:必须和“libobjs”库相链接,才能保证Objective-C能正常工作)
.mi :已经预处理过的Objective-C源文件
.mm、.M :Objective-C++源代码文件(Note that:必须和“libobjs”库相链接,才能保证Objective-C能正常工作)
.mii :预处理过的Objective-C++源文件
.o :编译后的目标文件
.s :汇编语言源代码文件
.S :经过预编译的汇编语言源代码文件
使用GCC编译器时,必须给出一系列的调用参数和文件名。不同类参数先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。
对于.s和.S文件的一些看法:对.s文件,汇编器(linux下用的是as),只做必要的汇编处理,不会像cpp处理.c文件那样预处理。
.S采用了as的高级功能,比如预处理。
以前的as叫做gas,功能比较弱,没有这样的预处理功能,也不能对实模式代码进行汇编。
所以Linux早期内核代码中的启动部分(实模式代码),是用as86,也就是AT&T编译器编译的。
所以早期内核有使用了两种汇编语言。
阅读(2648) | 评论(0) | 转发(0) |