Linker (også link editor , fra engelsk link editor, linker ) er et værktøjsprogram, der udfører linking ( “linking” ): det tager et eller flere objektmoduler som input og samler en eksekverbar eller biblioteksmodulfil fra dem.
Indledningsvis, før fremkomsten af dynamiske biblioteker , kunne indlæsere udføre nogle funktioner af linkeren [1] , men nu er indlæsningsprogrammer oftest allokeret til en separat proces [2] .
For at sammenkæde moduler bruger linkeren symboltabeller oprettet af compileren i hvert af objektmodulerne . Disse tabeller kan indeholde tegn af følgende typer:
For de fleste compilere er én objektfil resultatet af kompilering af én kildefil . Hvis et program er bygget af flere objektfiler, samler linkeren disse filer til en enkelt eksekverbar fil ved at beregne og erstatte adresser i stedet for symboler, enten på linktidspunktet (statisk link) eller ved kørselstidspunktet (dynamisk link).
Linkeren kan udtrække objektfiler fra specielle samlinger kaldet biblioteker . Hvis ikke alle de symboler, der refereres til af brugerobjektfiler, er defineret, så leder linkeren efter deres definitioner i de biblioteker, som brugeren har givet den som input. Typisk bruges et eller flere systembiblioteker af standardlinkeren. Når en objektfil, der indeholder definitionen af et søgt symbol, er fundet, kan linkeren inkludere den (filen) i den eksekverbare fil (i tilfælde af statisk linkning) eller udskyde den, indtil programmet starter (i tilfælde af dynamisk linking) .
Linkerens opgave er at definere og linke referencer til udefinerede navne i hvert modul. For hvert importeret navn findes dets definition i andre moduler, omtalen af navnet erstattes af dets adresse .
Linkeren udfører normalt ikke type- eller tællekontrol af procedure- og funktionsparametre. Hvis det er nødvendigt at kombinere objektmoduler af programmer skrevet på stærkt indtastede sprog, skal de nødvendige kontroller udføres af et ekstra værktøj, før linkeren startes.
Eksekverbare filformater ( sammenligning ) | |
---|---|
Unix | |
Windows , DOS og OS/2 | |
Andet |