Wat is het A-bestandsformaat?
.a-bestanden bevatten systeembibliotheken die worden gebruikt door softwareontwikkelaars. Dergelijke bestanden worden vaak aangetroffen op Unix-achtige systemen - waaronder Linux en macOS - terwijl Microsoft Windows-systemen .LIB-bestanden voor hetzelfde doel gebruiken. .a-bestanden bieden gecompileerde functies en headers waarnaar kan worden verwezen door bronbestanden. Bibliotheken met een .a-extensie worden gewoonlijk statische bibliotheken genoemd.
Een .a-bestand is technisch gezien een archief in ar-formaat: een container die een of meer gecompileerde objectbestanden (.o) bevat. Op Linux zijn de leden .o-bestanden in ELF-formaat; op macOS zijn het Mach-O-objecten. Elk .a-archief begint met de 8-byte ASCII-handtekening !<arch> gevolgd door een regeleinde, waardoor het herkenbaar is voor hulpprogramma's voor bestandsinspectie. U kunt de inhoud van het archief weergeven met ar t libname.a en geëxporteerde symbolen inspecteren met nm libname.a.
Computerprogramma's gebruiken twee soorten bronbibliotheken: statische bibliotheken en dynamische bibliotheken. Statische bibliotheken (.lib of .a) zijn doorgaans groter dan dynamische, omdat hun code tijdens het linken rechtstreeks in het doelprogramma wordt gecompileerd. Dynamische bibliotheken - .SO-bestanden op Linux, .dylib op macOS - worden verbonden met een bepaald programma bij de uitvoering ervan of tijdens de uitvoering van het programma. Programmaontwikkelaars kunnen hun code aanpassen om te werken met verschillende dynamisch gekoppelde bibliotheken.
Het hulpprogramma ar (onderdeel van GNU Binutils op Linux) is het standaardgereedschap voor het maken en onderhouden van .a-archieven. Omdat de linker alleen de objectbestanden extraheert die hij nodig heeft, wordt ongebruikte code uit een statische bibliotheek niet opgenomen in het uiteindelijke uitvoerbare bestand.
Beveiliging & veiligheid
RISICO: LOWEen .a is data voor de bouwfase, niet iets dat het besturingssysteem uitvoert, dus het vormt weinig direct risico voor eindgebruikers. Voor ontwikkelaars is het punt van zorg het vertrouwen in de toeleveringsketen: een kwaadaardige of gemanipuleerde statische bibliotheek linkt zijn code rechtstreeks in uw programma, dus gebruik alleen .a-bestanden van vertrouwde SDK-bronnen en verifieer checksums/handtekeningen. Een Ada-bronbestand .a is platte tekst en ongevaarlijk om te openen.
Formaatdetails
in een notendop- Ada-broncodebestand - Sommige Ada-compilers/projecten gebruiken .a (en .ada/.adb/.ads) voor Ada-broncode in platte tekst - dit is de betekenis die de legacy-database heeft geregistreerd, maar het komt veel minder vaak voor dan de statische bibliotheek.
Programma's die A-bestanden openen
Technische details
diepe specificaties| Bestandshandtekening | „!<arch>\n” (hex: 21 3C 61 72 63 68 3E 0A) bij byte-offset 0 |
| Archiefformaat | ar (Unix Archiver) - hetzelfde containerformaat op Linux, macOS en BSD-systemen |
| MIME-type | application/x-archive |
| Type lidbestand (Linux) | ELF verplaatsbare objectbestanden (.o) |
| Type lidbestand (macOS) | Mach-O verplaatsbare objectbestanden (.o) |
| Headergrootte per lid | 60 bytes - ASCII-velden: naam (16 B), tijdstempel (12 B), UID (6 B), GID (6 B), modus (8 B), grootte (10 B), eindmarkering (2 B) |
| Symboolindex-lid | GNU ar gebruikt een lid genaamd „/”; BSD/macOS ar gebruikt „__SYMDEF” - koppelt symboolnamen aan lidoffsets voor snel linken |
| Naamgevingsconventie | lib<naam>.a - bijv. libz.a, libssl.a, libpthread.a; het voorvoegsel „lib” is vereist door de -l vlag van de linker |
| Compressie | Geen - objectbestanden van leden worden letterlijk opgeslagen, ongecomprimeerd |
| Gedrag tijdens linktijd | Linker extraheert alleen de .o-leden die voldoen aan onopgeloste symbolen; ongebruikte leden worden niet opgenomen in het uiteindelijke uitvoerbare bestand |
| Standaard creatie-tool | ar (GNU Binutils op Linux; LLVM ar / BSD ar op macOS); aangeroepen als: ar rcs libname.a file1.o file2.o |
| Symboolinspectie-tool | nm - geeft een lijst van geëxporteerde, ongedefinieerde en lokale symbolen; bijv. nm libname.a |
| Inhoudsinspectie-tool | ar t libname.a toont leden; ar x libname.a extraheert ze; objdump / otool deassembleert lidcode |
| Windows-equivalent | .lib statische bibliotheek (COFF/PE-formaat); Windows cross-compilers zoals MinGW produceren ook .a-bestanden |
| Typisch bestandsgroottebereik | Varieert van enkele KB (kleine hulpprogramma-bibliotheek) tot honderden MB (bijv. libclang_rt.a of een volledige libc.a) |
| Uitgebracht | ar archive format from early Unix (1970s); standard static-library extension on Unix/Linux/macOS |
| Open standaard | Ja · royaltyvrij |
| Specificatie | en.wikipedia.org |
A conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over A-bestanden.