Linkur

Allikas: Vikipeedia
Disambig gray.svg  See artikkel räägib arvutiprogrammist, veebiviite kohta vaata hüperlink

Linkur ehk linkija (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 olemas kaks põhilist linkimise viisi:

  • Staatilise linkimise puhul toimub sümbolite lahendamine vahetult pärast programmi kompileerimist; kõik viidatud teegiosad kopeeritakse samasse binaarfaili koos programmi enda koodiga.
  • Dünaamilse linkimise puhul toimub sümbolite lahendamine programmi käivituse vői töö ajal. Mällu laetakse eraldi programmi binaarfail kui ka teegifailid, ning programmis kasutatud sümbolite viidad suunatakse teegifailile. Windows operatsioonisüsteemidel tunneb ära dünaamilised teegifailid nende laiendi ".DLL" järgi; Unix-laadsetes operatsioonisüsteemides kasutatakse eesliidet "lib" ning laiendit ".so".

Staatiline linkimine[muuda | redigeeri lähteteksti]

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

Dünaamiline linkimine[muuda | redigeeri lähteteksti]

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 erinevatel viisidel, näiteks erinevates versioonides samast operatsioonisüsteemist. Seda kasutavad ära ka erinevate operatsioonisüsteemide ühenduskihid, näiteks Wine tarkvara Windowsi programmide kasutamiseks Unix-laadsetel platvormidel.

Dünaamilist linkimist võib veel jagada kaheks: laadimisaegseks ning on-demand linkimiseks. Nagu nimedest 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 ei olegi (küll aga võidakse linkida programmikoodi interpretaator).

Vaata ka[muuda | redigeeri lähteteksti]

Välislingid[muuda | redigeeri lähteteksti]

John R. Levine raamatu "Linkers and Loaders" käsikiri