Ar (Unix) - Ar (Unix)
Původní autoři | Ken Thompson, Dennis Ritchie (AT&T Bell Laboratories ) |
---|---|
Vývojáři | Rozličný open-source a komerční vývojáři |
První vydání | 3. listopadu 1971 |
Operační systém | Unix, Unixový, PROTI, Plán 9, Peklo |
Plošina | Cross-platform |
Typ | Příkaz |
Přípona názvu souboru | |
---|---|
Typ internetového média | aplikace / x-archiv[1] |
Magické číslo | ! |
Typ formátu | formát archivu |
Kontejner pro | obvykle soubory objektů (.Ó, .obj) |
Standard | Není standardizováno, existuje několik variant |
Otevřený formát ? | Ano[2] |
The archivátor, známé také jednoduše jako ar, je Unix nástroj, který udržuje skupiny souborů jako jeden archivní soubor. Dnes, ar
se obvykle používá pouze k vytváření a aktualizaci statická knihovna soubory, které editor odkazů nebo linker používá a pro generování balíčků .deb pro Debian rodina; lze jej použít k vytváření archivů pro jakýkoli účel, ale byl do značné míry nahrazen dehet
pro jiné účely než statické knihovny.[3] Implementace ar
je zahrnut jako jeden z GNU Binutils.[2]
V Linux Standard Base (LSB), ar
byla zamítnuta a očekává se, že v budoucím vydání tohoto standardu zmizí. Důvodem bylo, že „LSB neobsahuje nástroje pro vývoj softwaru ani neurčuje formáty souborů .o a .a“.[4]
Podrobnosti o formátu souboru
Formát ar nebyl nikdy standardizován; moderní archivy jsou založeny na společném formátu se dvěma hlavními variantami, BSD a Systém V (původně známé jako COFF a také používá GNU, ELF, a Okna.)
Historicky existovaly i jiné varianty[5] počítaje v to V6, V7, AIX (malý i velký) a Coherent, které se od běžného formátu výrazně liší.[6]
Debian ".deb "archivy používají společný formát.
Soubor ar začíná globálním záhlaví, následuje záhlaví a datová část pro každý soubor uložený v souboru ar.
Každá datová sekce je zarovnána na 2 bajty. Pokud by to skončilo lichým posunem, použije se jako výplň nový řádek (' n', 0x0A).
Podpis souboru
Podpis souboru je jedno pole obsahující magický řetězec ASCII "!
následovaný singlem LF kontrolní znak (0x0A).
Záhlaví souboru
Každý soubor uložený v archivu ar obsahuje záhlaví souboru pro uložení informací o souboru. Společný formát je následující. Číselné hodnoty jsou zakódovány v ASCII a všechny hodnoty vpravo s mezerami ASCII (0x20).
Ofset | Délka | název | Formát |
---|---|---|---|
0 | 16 | Identifikátor souboru | ASCII |
16 | 12 | Časové razítko úpravy souboru | Desetinný |
28 | 6 | ID vlastníka | Desetinný |
34 | 6 | ID skupiny | Desetinný |
40 | 8 | Režim souborů (typ a oprávnění) | Osmičkový |
48 | 10 | Velikost souboru v bajtech | Desetinný |
58 | 2 | Končící znaky | 0x60 0x0A |
Protože záhlaví obsahují pouze tisknutelné znaky ASCII a řádkové kanály, archiv, který obsahuje pouze textové soubory, se proto stále jeví jako samotný textový soubor.
Členy jsou zarovnány na sudé hranice bajtů. „Každý člen archivního souboru začíná na hranici sudých bajtů; v případě potřeby je mezi soubory vložen nový řádek. Uvedená velikost však odráží skutečnou velikost souboru bez výplně.“[7]
Vzhledem k omezením délky a formátu názvu souboru vymyslely varianty GNU i BSD různé způsoby ukládání dlouhých názvů souborů. I když běžný formát netrpí rok 2038 problém, mnoho implementací obslužného programu ar dělá a možná bude třeba je v budoucnu upravit, aby správně zpracovávaly časová razítka přesahující 2147483647. Popis těchto rozšíření najdete v libbfd.[8]
V závislosti na formátu zahrnuje mnoho implementací ar globální tabulku symbolů (aka armap, adresář nebo index) pro rychlé propojení, aniž byste museli skenovat celý archiv a hledat symbol. POSIX tuto funkci rozpoznává a vyžaduje implementaci AR -s
možnost jeho aktualizace. Většina implementací ji umístí na první položku souboru.[9]
Varianta BSD
BSD ar ukládá názvy souborů s pravými polštářky s mezerami ASCII. To způsobí problémy s mezerami uvnitř názvů souborů.4,4BSD ar ukládá rozšířené názvy souborů umístěním řetězce „# 1 /“ následovaného délkou názvu souboru do pole pro název souboru a uložením skutečného názvu souboru před datovou sekci.[6]
Obslužný program BSD ar tradičně nezpracovává vytváření globální tabulky pro vyhledávání symbolů a deleguje tento úkol na samostatný obslužný program s názvem ranlib,[10] který vloží soubor specifický pro architekturu s názvem __. SYMDEF
jako první člen archivu.[11] Někteří potomci umístí za jméno mezeru a „TŘÍDĚNO“, aby označili seřazenou verzi.[12] Volala 64bitová varianta __. SYMDEF_64
existuje dne Darwine.
Protože POSIX přidal požadavek na -s
volba jako náhrada ranlib, nicméně, novější implementace BSD ar byly přepsány, aby tuto funkci měly. FreeBSD zejména zrušilo formát tabulky SYMDEF a přijalo tabulku stylů System V.[13]
Varianta System V (nebo GNU)
Systém V ar používá k označení konce názvu souboru znak „/“ (0x2F); to umožňuje použití mezer bez použití rozšířeného názvu souboru. Poté uloží více rozšířených názvů souborů do datové části souboru s názvem „//“, na tento záznam budou odkazovat budoucí záhlaví. Záhlaví odkazuje na rozšířený název souboru uložením znaku „/“ následovaným desetinným posunem na začátek názvu souboru v sekci dat rozšířeného názvu souboru. Samotný formát tohoto souboru „//“ je jednoduše seznamem dlouhých názvů souborů oddělených jedním nebo více znaky LF. Všimněte si, že posunutí desetinných míst jsou počet znaků, nikoli číslo řádku nebo řetězce v souboru „//“. Toto je obvykle druhá položka souboru, po tabulce symbolů, která je vždy první.
Systém V ar používá speciální název souboru „/“ k označení, že následující záznam dat obsahuje tabulku pro vyhledávání symbolů, která se používá v knihovnách ar k urychlení přístupu. Tato tabulka symbolů je sestavena ze tří částí, které se zaznamenávají společně jako souvislá data.
- 32bitové celé číslo endian, udávající počet položek v tabulce.
- Sada 32bitových velkých celých čísel endian. Jeden pro každý symbol, zaznamenávající pozici v archivu záhlaví souboru obsahujícího tento symbol.
- Sada řetězců zakončených nulou. Každý z nich je název symbolu a vyskytuje se ve stejném pořadí jako seznam pozic v části 2.
Některé systémy System V nepoužívají výše popsaný formát pro vyhledávací tabulku symbolů. U operačních systémů jako např HP-UX 11.0, jsou tyto informace uloženy v datové struktuře založené na SOM formát souboru.
Speciální soubor „/“ není ukončen konkrétní sekvencí; konec se předpokládá po přečtení posledního názvu symbolu.
Chcete-li překonat limit velikosti souboru 4 GiB, některé operační systémy jako Solaris 11.2 a GNU používají vyhledávací tabulku variant. Místo 32bitových celých čísel se v tabulkách vyhledávání symbolů používají 64bitová celá čísla. Jako identifikátor této tabulky se používá řetězec „/ SYM64 /“ místo toho „/“[14]
Varianta Windows
Varianta Windows (PE / COFF) je založena na variantě SysV / GNU. První položka „/“ má stejné rozložení jako tabulka symbolů SysV / GNU. Druhá položka je další „/“, Microsoft ECOFF rozšíření, které ukládá tabulku křížových odkazů s rozšířenými symboly. Ten je tříděn a používá celá endia celá čísla.[5][15] Třetí položka jsou volitelná data „//“ s dlouhým jménem jako v SysV / GNU.[16]
Tenký archiv
Verze ar
v GNU binutils a Elfutils mít další formát „tenkého archivu“ s magickým číslem !
Příklad použití
Vytvoření archivu ze souborů třída 1.o, třída2.o, třída3.o, byl by použit následující příkaz:
ar rcs libclass.a class1.o class2.o class3.o
Unix linkery, obvykle vyvolané prostřednictvím C překladač cc
, umí číst ar
soubory a extrahovat soubory objektů od nich, takže pokud libclass.a
je archiv obsahující třída 1.o
, třída2.o
a třída3.o
, pak
cc main.c libclass.a
nebo (pokud je libclass.a umístěn do standardní cesty ke knihovně, jako / usr / local / lib)
cc main.c - třída
nebo (během linkování)
ld ... main.o -class ...
je stejné jako:
cc main.c class1.o class2.o class3.o
Viz také
Reference
- ^ A b „application / x-archive“. Citováno 2019-03-11.
- ^ A b "ar (1) - Linuxová manuálová stránka". Citováno 3. října 2013.
- ^ „Statické knihovny“. TLDP. Citováno 3. října 2013.
- ^ Linux Standard Base Core Specification, verze 4.1, Kapitola 15. Příkazy a obslužné programy> ar
- ^ A b Levine, John R. (2000) [říjen 1999]. „Kapitola 6: Knihovny“. Linkery a nakladače. Řada Morgan Kaufmann v softwarovém inženýrství a programování (1. vyd.). San Francisco, USA: Morgan Kaufmann. ISBN 1-55860-496-0. OCLC 42413382. Archivováno z původního dne 2012-12-05. Citováno 2020-01-12. Kód: [1][2] Errata: [3]
- ^ A b Ruční stránka pro formát souboru NET / 2 ar
- ^ „ar.h“. www.unix.com. Fóra pro UNIX a Linux.
- ^ "bminor / binutils-gdb: archive.c". GitHub.
- ^ Specifikace Single UNIX, Vydání 7 od Otevřená skupina - Referenční příručka a nástroje,
- ^ Ruční stránka pro obslužný program ranlib NET / 2
- ^ Ruční stránka pro formát souboru NET / 2 ranlib
- ^ "ranlib.h". opensource.apple.com.
- ^ FreeBSD Formáty souborů Manuál –
- ^ „ar.h (3HEAD)“. docs.oracle.com. Oracle Corporation. 11. listopadu 2014. Citováno 14. listopadu 2018.
- ^ Pietrek, Matt (Duben 1998), „Pod kapotou“, Microsoft Systems Journal, archivovány z originál dne 2007-06-24, vyvoláno 2014-08-23
- ^ "llvm-mirror / llvm: archive.cpp (detekce formátu)". GitHub. Citováno 10. února 2020.
- ^ "ar". GNU Binary Utilities.
externí odkazy
- Specifikace Single UNIX, Vydání 7 od Otevřená skupina : vytváření a údržba archivů knihoven - reference k příkazům a nástrojům,
- Plán 9 Programátorská příručka, svazek 1 –
- Peklo Obecné příkazy Manuál –
- Linux Příkazy uživatele Manuál –
- FreeBSD Obecné příkazy Manuál –
- Verze 7 Unix Programátor Manuál –
- FreeBSD Formáty souborů Manuál - účet formátů Unix –
- 32bitový dokument architektury run-time PA-RISC, HP-UX 11.0 verze 1.0, Hewlett-Packard, 1997.
Vidět Kapitola 4: Přemístitelné knihovny. Dostupné v [4] (devresource.hp.com)