Linkur

Linkur (inglise keeles linker) on arvutiprogramm, mis võtab erinevad objektikoodi ja teegifailide nn importteegid ning ühendab need kokku ühtseks, käivitatavaks programmiks (või ka uueks programmiteegiks).

Tavaliselt on iga arvutiprogramm lingitud ka mitme operatsioonisüsteemi teegi külge.

On kaks põhilist linkimisviisi:
 staatilise linkimise korral toimub sümbolite lahendamine vahetult pärast programmi kompileerimist; kõik viidatud teegiosad kopeeritakse samasse binaarfaili koos programmi enda koodiga;
 dünaamilise linkimise korral toimub sümbolite lahendamine programmi käivituse või töö ajal. Mällu laaditakse eraldi programmi binaarfail ja ka teegifailid; programmis kasutatud sümbolite viidad suunatakse teegifailile. Windowsi operatsioonisüsteemidel tunneb ära dünaamilised teegifailid nende laiendi ".DLL" järgi; Unixi-laadsetes operatsioonisüsteemides kasutatakse eesliidet "lib" ja laiendit ".so".

Staatiline linkimine
Staatilise linkimise ajal kopeeritakse osa teekide sisust binaarfaili (programmifaili). See tähendab, et kui mitu binaarfaili kasutab teegi samu osi, eksisteerib neist arvutis mitu eksemplari. See-eest ei jää programmikood sõltuvaks süsteemis eksisteerivast teegifailist. Viimane võib olla probleemiks näiteks siis, kui mitu programmi nõuavad eri versioone samast teegist. Seda fenomeni kutsutakse vahel DLL-põrguks ("DLL hell").

Dünaamiline linkimine
Nagu eelpool mainitud, dünaamiline linkimine viiakse läbi programmi käivitamise ajal. Seetõttu ei ole programmi binaarfail iseseisev, vaid jääb sõltuvaks välistest teegifailidest. Sarnaselt staatilise linkimisega lahendab linkur binaarfaili loomise ajal programmis kasutatud sümbolid, kuid neid ei panda programmifaili sisse, vaid märgitakse ära, kust teegifailist neid käivituse ajal otsida.

Dünaamilist linkimist kasutatakse ära olukordades, kus olenevalt käivituskeskkonnast täidetakse teatud toiminguid eri viisidel, näiteks eri versioonides samast operatsioonisüsteemist. Seda kasutavad ära ka eri operatsioonisüsteemide ühenduskihid, näiteks Wine'i tarkvara Windowsi programmide kasutamiseks Unixi-laadsetel platvormidel.

Dünaamilise linkimise võib liigitada veel kaheks: laadimisaegseks ja nõudmisel (on-demand) linkimiseks. Nagu nimetustest võib järeldada, täidetakse üks programmi käivitamise ajal ning teine siis, kui mõne linkimata sümboli poole pöördutakse. Viimane lähenemine on populaarne uutes programmeerimiskeeltes, kus eraldi linkimisfaasi ega sümboleid polegi (küll aga võidakse linkida programmikoodi interpretaator).

Vaata ka
 Kompilaator
 Teek
 GNU Binutils

 Välislingid 
 John R. Levine'i raamatu "Linkers and Loaders" käsikiri

Kategooria:Programmeerimine