Linker (také link editor , z angličtiny link editor, linker ) je nástrojový program , který provádí linkování ( „linking“ ): jako vstup bere jeden nebo více objektových modulů a sestavuje z nich spustitelný soubor nebo soubor modulu knihovny.
Zpočátku, před příchodem dynamických knihoven , mohly zavaděče provádět některé funkce linkeru [1] , ale nyní je načítání programů nejčastěji přiděleno samostatnému procesu [2] .
K propojení modulů používá linker tabulky symbolů vytvořené kompilátorem v každém z objektových modulů . Tyto tabulky mohou obsahovat znaky následujících typů:
Pro většinu kompilátorů je jeden objektový soubor výsledkem kompilace jednoho zdrojového souboru . Pokud je program sestaven z více objektových souborů, linker sestaví tyto soubory do jednoho spustitelného souboru výpočtem a nahrazením adres místo symbolů, buď v době propojení (statický odkaz) nebo za běhu (dynamický odkaz).
Linker může extrahovat soubory objektů ze speciálních kolekcí nazývaných knihovny . Pokud nejsou definovány všechny symboly, na které odkazují soubory uživatelských objektů, pak linker hledá jejich definice v knihovnách, které mu uživatel zadal jako vstup. Standardní linker obvykle používá jednu nebo více systémových knihoven. Když je nalezen objektový soubor obsahující definici nějakého hledaného symbolu, linker jej (soubor) může zahrnout do spustitelného souboru (v případě statického linkování) nebo odložit do spuštění programu (v případě dynamického linkování) .
Úkolem linkeru je definovat a propojit odkazy na nedefinované názvy v každém modulu. U každého importovaného jména je jeho definice nalezena v jiných modulech, zmínka o názvu je nahrazena jeho adresou .
Linker normálně neprovádí kontrolu typu nebo počtu parametrů procedury a funkce. Pokud je nutné kombinovat objektové moduly programů napsaných v silně typizovaných jazycích, pak je nutné před spuštěním linkeru provést potřebné kontroly dodatečným nástrojem.
spustitelných souborů ( srovnání ) | Formáty|
---|---|
Unix | |
Windows , DOS a OS/2 | |
jiný |