A.out: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
MBHbot (обсуждение | вклад) м →top: replaced: {{cite paper| → {{cite journal| |
AlanNova (обсуждение | вклад) →Ссылки: дополнение |
||
(не показано 8 промежуточных версий 7 участников) | |||
Строка 4: | Строка 4: | ||
| genre = [[двоичный файл|двоичный]], [[Исполняемый файл|исполняемый]], [[объектный файл|объектный]], [[разделяемая библиотека]] |
| genre = [[двоичный файл|двоичный]], [[Исполняемый файл|исполняемый]], [[объектный файл|объектный]], [[разделяемая библиотека]] |
||
}} |
}} |
||
'''a.out''' (от '''''a'''ssembler '''out'''put'' — вывод [[ассемблер]]а) — формат |
'''a.out''' (от '''''a'''ssembler '''out'''put'' — вывод [[ассемблер]]а) — формат исполняемых файлов, объектного кода и, позднее, [[Разделяемая библиотека|разделяемых библиотек]] в некоторых (старых) версиях [[UNIX]]. Название a.out впервые было использовано [[Кен Томпсон|Кеном Томпсоном]] в качестве названия файлов, продуцируемых его ассемблером для [[PDP-7]] в 1968 году<ref>{{harvtxt|Ritchie|1993}}: «Thompson’s PDP-7 assembler outdid even DEC’s in simplicity; it evaluated expressions and emitted the corresponding bits. There were no libraries, no loader or link editor: the entire source of a program was presented to the assembler, and the output file—with a fixed name—that emerged was directly executable. (This name, ''a.out,'' explains a bit of Unix etymology; it is the output of the assembler. Even after the system gained a linker and a means of specifying another name explicitly, it was retained as the default executable result of a compilation.)»</ref>. |
||
Впоследствии это название закрепилось за форматом продуцируемых файлов для отличия от других форматов объектных файлов. |
Впоследствии это название закрепилось за форматом продуцируемых файлов для отличия от других форматов объектных файлов. |
||
Строка 11: | Строка 11: | ||
Операционные системы семейства [[BSD]] использовали '''a.out''' в течение некоторого времени. Так, [[NetBSD|NetBSD/i386]] используют ELF-формат начиная с версии 1.5, [[FreeBSD|FreeBSD/i386]] — с версии 3.0. Расширенная версия этого формата '''a.outb''' использовалась группой [[BSD]]-совместимых операционных систем ([[NetBSD]], [[FreeBSD]] и [[OpenBSD]]). Компилятор [[NASM]] может генерировать файлы обоих форматов, если указать ключ '''-f aout''' или '''-f aoutb'''. {{уточнить}} |
Операционные системы семейства [[BSD]] использовали '''a.out''' в течение некоторого времени. Так, [[NetBSD|NetBSD/i386]] используют ELF-формат начиная с версии 1.5, [[FreeBSD|FreeBSD/i386]] — с версии 3.0. Расширенная версия этого формата '''a.outb''' использовалась группой [[BSD]]-совместимых операционных систем ([[NetBSD]], [[FreeBSD]] и [[OpenBSD]]). Компилятор [[NASM]] может генерировать файлы обоих форматов, если указать ключ '''-f aout''' или '''-f aoutb'''. {{уточнить}} |
||
[[Linux]] использовал '''a.out''' до версии ядра 1.2 (поддержка ELF впервые была добавлена в экспериментальную ветку 1.1.52). Потребность перехода Linux на ELF была частично вызвана сложностями сборки разделяемых библиотек в '''a.out''' формате на этой платформе, включая необходимость регистрации адресного пространства, в которое библиотека должна была быть загружена, проистекавшая из неспособности компоновщика ld.so для '''a.out''' перемещать динамические библиотеки в памяти, в отличие от систем BSD, где использовался более гибкий вариант формата.<ref> |
[[Linux]] использовал '''a.out''' до версии ядра 1.2 (поддержка ELF впервые была добавлена в экспериментальную ветку 1.1.52), а с версии 5.19 более не поддерживается. Потребность перехода Linux на ELF была частично вызвана сложностями сборки разделяемых библиотек в '''a.out''' формате на этой платформе, включая необходимость регистрации адресного пространства, в которое библиотека должна была быть загружена, проистекавшая из неспособности компоновщика ld.so для '''a.out''' перемещать динамические библиотеки в памяти, в отличие от систем BSD, где использовался более гибкий вариант формата.<ref> |
||
{{ |
{{статья |заглавие=How To Write Shared Libraries |страницы=Section 1.1 (A Little Bit of History) |том=4.0 |ссылка=http://people.redhat.com/drepper/dsohowto.pdf |accessdate=2015-07-06 |archiveurl=https://web.archive.org/web/20070616175733/http://people.redhat.com/drepper/dsohowto.pdf |archivedate=2007-06-16 |автор=[[Ulrich Drepper]] |число=20 |месяц=8 |год=2006 }}. — «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.».</ref><ref> |
||
{{cite web| title= The ELF Object File Format: Introduction| author= Eric Youngdale| date= |
{{cite web| title= The ELF Object File Format: Introduction | author= Eric Youngdale | date= 1995-04-01 | accessdate= 2015-07-06 | url= http://www.linuxjournal.com/article/1059 | quote= (...) it is not impossible to design shared library implementations that work with a.out. The current Linux shared libraries are certainly one example; another example is SunOS-style shared libraries which are currently used by BSD-du-jour. SunOS-style shared libraries contain a lot of the same concepts as ELF shared libraries (...) | archiveurl= https://web.archive.org/web/20090310171513/http://www.linuxjournal.com/article/1059 | archivedate= 2009-03-10 }}</ref><ref> |
||
{{cite web| title= BSD Myths| accessdate= 2015-07-06| url= http://people.freebsd.org/~nik/advocacy/myths.html#aout| quote= There were no pressing reasons to switch earlier. In particular, FreeBSD did not (and does not) have the problems building shared libraries that spurred the Linux conversion from a.out to ELF.| archiveurl= https://web.archive.org/web/20070417095655/http://people.freebsd.org/~nik/advocacy/myths.html#aout| archivedate= 2007-04-17 |
{{cite web| title= BSD Myths | accessdate= 2015-07-06 | url= http://people.freebsd.org/~nik/advocacy/myths.html#aout | quote= There were no pressing reasons to switch earlier. In particular, FreeBSD did not (and does not) have the problems building shared libraries that spurred the Linux conversion from a.out to ELF. | archiveurl= https://web.archive.org/web/20070417095655/http://people.freebsd.org/~nik/advocacy/myths.html#aout | archivedate= 2007-04-17 }}</ref> |
||
[[Minix]] 3 перешёл на ELF в версии 3.2.0. |
[[Minix]] 3 перешёл на ELF в версии 3.2.0. |
||
Строка 20: | Строка 20: | ||
'''a.out''' хранит [[Отладочные символы|отладочную информацию]] в формате ''STABS'', который позднее был использован в различных вариантах COFF и ELF. |
'''a.out''' хранит [[Отладочные символы|отладочную информацию]] в формате ''STABS'', который позднее был использован в различных вариантах COFF и ELF. |
||
Компилятор [[GCC]] по умолчанию выдаёт файл с именем <tt>a.out</tt>, если не используется опция '''-o'''<ref>[ |
Компилятор [[GCC]] по умолчанию выдаёт файл с именем <tt>a.out</tt>, если не используется опция '''-o'''<ref>[https://linux.die.net/man/1/gcc gcc(1) — Linux man page] {{Wayback|url=https://linux.die.net/man/1/gcc |date=20201013105340 }} {{ref-en}}</ref>, но как правило, уже не в этом формате<ref> |
||
В то же время в системе [[Cygwin]] имя файла по умолчанию <tt>a.exe</tt>, соответствующее стандартному расширению [[.EXE]] для исполняемых файлов Windows.</ref>. |
В то же время в системе [[Cygwin]] имя файла по умолчанию <tt>a.exe</tt>, соответствующее стандартному расширению [[.EXE]] для исполняемых файлов Windows.</ref>. |
||
== Примечания == |
== Примечания == |
||
{{примечания}} |
{{примечания}} |
||
== Литература == |
|||
* {{cite conference|last=Ritchie|first=Dennis M.|author-link=Ритчи, Деннис|title=The Development of the C Language|pages=201–208|doi=10.1145/154766.155580|location=[[Кембридж (Массачусетс)|Cambridge, MA]]|date=20–23 April 1993|url=http://www.bell-labs.com/usr/dmr/www/chist.html|journal=The Second ACM SIGPLAN History of Programming Languages Conference (HOPL-II)|publisher=[[Association for Computing Machinery|ACM]]|isbn=0-89791-570-4|lang=en}} |
|||
== Ссылки == |
== Ссылки == |
Текущая версия от 18:06, 18 марта 2024
a.out | |
---|---|
Расширение |
.o или .so |
Разработчик | AT&T и Кен Томпсон |
Тип формата | двоичный, исполняемый, объектный, разделяемая библиотека |
a.out (от assembler output — вывод ассемблера) — формат исполняемых файлов, объектного кода и, позднее, разделяемых библиотек в некоторых (старых) версиях UNIX. Название a.out впервые было использовано Кеном Томпсоном в качестве названия файлов, продуцируемых его ассемблером для PDP-7 в 1968 году[1]. Впоследствии это название закрепилось за форматом продуцируемых файлов для отличия от других форматов объектных файлов.
Формат a.out использовался в ранних UNIX-системах, и со временем был заменён сперва на COFF в AT&T Unix System V, а тот, в свою очередь, на формат ELF в Unix System V Release 4, который ныне используется в большинстве UNIX- и даже некоторых не UNIX-подобных операционных системах.
Операционные системы семейства BSD использовали a.out в течение некоторого времени. Так, NetBSD/i386 используют ELF-формат начиная с версии 1.5, FreeBSD/i386 — с версии 3.0. Расширенная версия этого формата a.outb использовалась группой BSD-совместимых операционных систем (NetBSD, FreeBSD и OpenBSD). Компилятор NASM может генерировать файлы обоих форматов, если указать ключ -f aout или -f aoutb. [уточнить]
Linux использовал a.out до версии ядра 1.2 (поддержка ELF впервые была добавлена в экспериментальную ветку 1.1.52), а с версии 5.19 более не поддерживается. Потребность перехода Linux на ELF была частично вызвана сложностями сборки разделяемых библиотек в a.out формате на этой платформе, включая необходимость регистрации адресного пространства, в которое библиотека должна была быть загружена, проистекавшая из неспособности компоновщика ld.so для a.out перемещать динамические библиотеки в памяти, в отличие от систем BSD, где использовался более гибкий вариант формата.[2][3][4]
Minix 3 перешёл на ELF в версии 3.2.0.
a.out хранит отладочную информацию в формате STABS, который позднее был использован в различных вариантах COFF и ELF.
Компилятор GCC по умолчанию выдаёт файл с именем a.out, если не используется опция -o[5], но как правило, уже не в этом формате[6].
Примечания
[править | править код]- ↑ Ritchie (1993): «Thompson’s PDP-7 assembler outdid even DEC’s in simplicity; it evaluated expressions and emitted the corresponding bits. There were no libraries, no loader or link editor: the entire source of a program was presented to the assembler, and the output file—with a fixed name—that emerged was directly executable. (This name, a.out, explains a bit of Unix etymology; it is the output of the assembler. Even after the system gained a linker and a means of specifying another name explicitly, it was retained as the default executable result of a compilation.)»
- ↑ Ulrich Drepper. How To Write Shared Libraries. — 2006. — 20 августа (т. 4.0). — С. Section 1.1 (A Little Bit of History). Архивировано 16 июня 2007 года.. — «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.».
- ↑ Eric Youngdale. The ELF Object File Format: Introduction (1 апреля 1995). — «(...) it is not impossible to design shared library implementations that work with a.out. The current Linux shared libraries are certainly one example; another example is SunOS-style shared libraries which are currently used by BSD-du-jour. SunOS-style shared libraries contain a lot of the same concepts as ELF shared libraries (...)». Дата обращения: 6 июля 2015. Архивировано 10 марта 2009 года.
- ↑ BSD Myths . — «There were no pressing reasons to switch earlier. In particular, FreeBSD did not (and does not) have the problems building shared libraries that spurred the Linux conversion from a.out to ELF.» Дата обращения: 6 июля 2015. Архивировано 17 апреля 2007 года.
- ↑ gcc(1) — Linux man page Архивная копия от 13 октября 2020 на Wayback Machine (англ.)
- ↑ В то же время в системе Cygwin имя файла по умолчанию a.exe, соответствующее стандартному расширению .EXE для исполняемых файлов Windows.
Литература
[править | править код]- Ritchie, Dennis M. (20-23 April 1993). The Development of the C Language. The Second ACM SIGPLAN History of Programming Languages Conference (HOPL-II) (англ.). Cambridge, MA: ACM. pp. 201—208. doi:10.1145/154766.155580. ISBN 0-89791-570-4.
{{cite conference}}
: Википедия:Обслуживание CS1 (формат даты) (ссылка)
Ссылки
[править | править код]- Страница man для a.out из Version 6 Unix (англ.)
- a.out manual page из Version 7 Unix (англ.)
- a.out manual page из 2.11BSD (англ.)
- a.out manual page из 4.2BSD (англ.)
- a.out manual page из SunOS 4.1.3 (англ.)
- a.out manual page из FreeBSD (англ.)