我们经过编译的目标文件,里面到底存放的内容是什么呢?其实,目标文件本身已经是编译后的可执行文件了,只是还没有经过链接,所以内部很多符号还没有分配地址。其实目标文件本身就是按照可执行文件的格式进行存储的,只是目标文件和可执行文件在文件结构上略微有些区别。
1.目标文件的格式
目前主流的pc平台所流行的可执行文件格式主要分为两种,一种是Windows下的PE(Portable Executable),另一种是Linux下的ELF(Executable Linkable Format),它们都是COFF(Common File Format)的变种。广义上来看,目标文件,动态库文件和可执行文件其实都是同样按照可执行文件的格式存储的。
以Linux平台为例,我们可以看到目标文件,动态库文件,可执行文件的文件格式都为ELF文件,区别在于目标文件是Relocatable,动态库文件是Shared object,可执行文件是Executable。
目标文件(MBB_PUSCH_FDP_Task.o)
动态库文件(libfft.so)
可执行文件 (ls)
ELF文件标准里把系统中采用ELF格式的文件归为4类,分别是:
(1)可重定位文件(Relocatable): 这类文件包含了代码和数据,可以被用来链接成可执行文件或者共享库文件。
(2)可执行文件(Executable): 这类文件包含了可以直接执行的程序。
(3)