扩展名 |
无, .o, .so |
---|---|
开发者 | AT&T |
格式类型 | 二进制文件、执行档、目的码、函式库 |
a.out是旧版类Unix系统中用于执行档、目的码和后来系统中的函式库的一种文件格式,这个名称的意思是汇编器输出。
尽管目前大多數类Unix系统都已改用ELF格式,不再采用a.out格式,但编译器和链接器依然会在用户未指定文件名时,将输出文件取名为“a.out”。[1]
在UNIX第一版中,就出现了给PDP-7和PDP-11用的a.out格式。[2]之后它被UNIX System V中的COFF所取代,而COFF最后也被SVR4中的ELF格式所取代。
尽管BSD曾经沿用了一段时间的a.out格式,但较新的BSD系统都已切换到ELF。NetBSD/i386在1.5版中正式从a.out切换到ELF,FreeBSD/i386则是在2.2到3.0的转换中切换到ELF的。
a.out格式对调试信息的支持是由符号表中称作“stabs”的特殊项实现的。许多COFF和ELF变体中也用到了stabs格式。
Linux在1.2版内核之前也曾使用a.out格式(实验性的1.1.52版中加入了对ELF的支持),在此之后也被ELF取代了。 [3]Linux之所以转向ELF,或多或少是因为在此平台上构建一个a.out格式的函式库所需的复杂性过高:因为Linux中a.out的ld.so不能重定位共享函式库,所以需要一个中央机构来注册各个函式库的虚拟地址域。[4]一些BSD变体在Linux被迫转向ELF之后仍然用了很久的a.out格式,因为相比于Linux,BSD的a.out略微更灵活一些。[5]由于a.out格式的相关代码已经老旧并缺乏维护,而且已经几乎没有使用a.out格式的存在,5.1版内核决定移除相应的功能支持。[6]
a.out执行档通常是以下几种变体之一:OMAGIC、NMAGIC、QMAGIC或ZMAGIC。
a.out文件包含至多七节,顺序如下:
When introducing shared libraries certain design decisions had to be made to work in the limitations of a.out. (...) For all these reasons and more, Linux converted early on to using ELF (Executable Linkage Format) as the binary format.
|section=
被忽略 (帮助)
Linux supports ELF binaries for ~25 years now. a.out coredumping has bitrotten quite significantly and would need some fixing to get it into shape again but considering how even the toolchains cannot create a.out executables in its default configuration, let's deprecate a.out support and remove it a couple of releases later, instead.
|