Statisk bibliotek - Static library
I datalogi er et statisk bibliotek eller et statisk linket bibliotek et sæt rutiner, eksterne funktioner og variabler, der løses i en opkalder ved kompileringstid og kopieres til en målapplikation af en kompilator , linker eller bindemiddel, der producerer et objekt fil og en stand-alone eksekverbar . Denne eksekverbare og processen med at kompilere den er begge kendt som en statisk opbygning af programmet. Historisk set kunne biblioteker kun være statiske . Statiske biblioteker flettes enten med andre statiske biblioteker og objektfiler under opbygning / sammenkædning for at danne en enkelt eksekverbar eller indlæses ved kørsel i adresserummet for deres tilsvarende eksekverbare ved en statisk hukommelsesforskydning bestemt ved kompileringstid / linktid.
Fordele og ulemper
Der er flere fordele ved statisk at linke biblioteker med en eksekverbar i stedet for dynamisk at linke dem. Den mest betydningsfulde fordel er, at applikationen kan være sikker på, at alle dens biblioteker er til stede, og at de er den korrekte version. Dette undgår afhængighedsproblemer, også kendt som DLL-helvede eller mere generelt afhængighedshelvede . Statisk sammenkædning kan også tillade, at applikationen er indeholdt i en enkelt eksekverbar fil, hvilket forenkler distribution og installation.
Med statisk sammenkædning er det nok at medtage de dele af biblioteket, der direkte og indirekte refereres til af den eksekverbare mål (eller målbiblioteket). Med dynamiske biblioteker indlæses hele biblioteket, da det ikke på forhånd er kendt, hvilke funktioner der påberåbes af applikationer. Om denne fordel er væsentlig i praksis afhænger af strukturen i biblioteket.
Ved statisk sammenkædning bliver størrelsen af den eksekverbare større end ved dynamisk sammenkædning, da bibliotekkoden er gemt i den eksekverbare snarere end i separate filer. Men hvis biblioteksfiler tælles som en del af applikationen, vil den samlede størrelse være ens eller endnu mindre, hvis compileren fjerner de ubrugte symboler.
Miljøspecifik
På Microsoft Windows er det almindeligt at medtage de biblioteksfiler, en applikation har brug for, med applikationen. På Unix-lignende systemer er dette mindre almindeligt, da pakkehåndteringssystemer kan bruges til at sikre, at de korrekte biblioteksfiler er tilgængelige. Dette gør det muligt at dele bibliotekets filer mellem mange applikationer, hvilket fører til pladsbesparelser. Det giver også biblioteket mulighed for at blive opdateret til at rette fejl og sikkerhedsfejl uden at opdatere de applikationer, der bruger biblioteket. I praksis bruger mange eksekverbare filer (især dem, der er målrettet mod Microsoft Windows) både statiske og dynamiske biblioteker.
Forbindelse og indlæsning
Enhver statisk biblioteksfunktion kan kalde en funktion eller procedure i et andet statisk bibliotek. Den linker og læsser håndtere dette på samme måde som for mulige andre objektfiler . Statiske biblioteksfiler kan linkes ved kørsel af en sammenkædningsindlæser (f.eks. X11- modulindlæseren). Om en sådan proces kan kaldes statisk sammenkædning er imidlertid kontroversiel.
Oprettelse af statiske biblioteker i C / C ++
Statiske biblioteker kan let oprettes i C eller i C ++ . Disse to sprog giver lagerklasse-specifikationer til at indikere ekstern eller intern sammenkædning ud over at give andre funktioner. For at oprette et sådant bibliotek skal de eksporterede funktioner / procedurer og andre objektsvariabler specificeres for ekstern sammenkædning (dvs. ved ikke at bruge C- staticnøgleordet ). Statiske biblioteks filnavne har normalt " .a " udvidelse på Unix-lignende systemer og " .lib " udvidelse på Microsoft Windows .
For eksempel for at oprette et arkiv med navnet libclass.a fra filer class1.o , class2.o , class3.o , vil følgende kommando blive brugt:
ar rcs libclass.a class1.o class2.o class3.o
at kompilere et program, der afhænger af class1.o , class2.o og class3.o , kunne man gøre:
cc main.c libclass.a
eller (hvis libclass.a er placeret i en standard bibliotekssti, som / usr / local / lib )
cc main.c -lclass
eller (under sammenkædning)
ld ... main.o -lclass ...
i stedet for:
cc main.c class1.o class2.o class3.o
Se også
- Statisk opbygning
- Bibliotek (computing)
- Linker (computing)
- Loader (computing)
- Delt bibliotek
- Dynamic-link-bibliotek (DLL, .dll)
- Ekstern variabel
- Objektfil
- Forbindende
Referencer
- ^ a b c "Statiske biblioteker" . TLDP . Hentet 3. oktober 2013 .
-
^ Anderson, Rick (2000-01-11). "Slutningen af DLL-helvede" . microsoft.com. Arkiveret fra originalen den 2001-06-05 . Hentet 2013-08-31 .
Private DLL'er er DLL'er, der er installeret med et bestemt program og kun bruges af det pågældende program.