Co jsou dynamické knihovny?

Většina funkcí aplikace je implementována v knihovnách spustitelného kódu. Když je aplikace propojena s knihovnou pomocí statického linkeru, kód, který aplikace používá, je zkopírován do vygenerovaného spustitelného souboru. Statický linker shromažďuje zkompilovaný zdrojový kód, známý jako objektový kód, a kód knihovny do jednoho spustitelného souboru, který se za běhu celý načte do paměti. Druh knihovny, která se stane součástí spustitelného souboru aplikace, se nazývá statická knihovna. Statické knihovny jsou kolekce nebo archivy objektových souborů.

Při spuštění aplikace se její kód – který zahrnuje kód statických knihoven, s nimiž byla propojena – načte do adresového prostoru aplikace. Propojení mnoha statických knihoven do aplikace vytváří velké spustitelné soubory aplikace. Obrázek 1 ukazuje využití paměti aplikace, která používá funkce implementované ve statických knihovnách. Aplikace s velkými spustitelnými soubory trpí pomalým spouštěním a velkou paměťovou stopou. Také když je statická knihovna aktualizována, její klientské aplikace nemají prospěch z vylepšení, která v ní byla provedena. Aby vývojář aplikace získal přístup k vylepšeným funkcím, musí propojit objektové soubory aplikace s novou verzí knihovny. A uživatelé aplikací by museli nahradit svou kopii aplikace nejnovější verzí. Udržování aplikace v aktuálním stavu s nejnovějšími funkcemi poskytovanými statickými knihovnami proto vyžaduje rušivou práci vývojářů i koncových uživatelů.

Obrázek 1 Aplikace používající statické knihovny

Vhodnějším přístupem je, aby aplikace načítala kód do svého adresního prostoru, když je skutečně potřeba, a to buď při spuštění, nebo za běhu. Typ knihovny, který tuto flexibilitu poskytuje, se nazývá dynamická knihovna. Dynamické knihovny nejsou staticky linkované do klientských aplikací; nestávají se součástí spustitelného souboru. Místo toho mohou být dynamické knihovny načteny (a propojeny) do aplikace buď při jejím spuštění, nebo za běhu.

Obrázek 2 ukazuje, jak implementace některých funkcí jako dynamických knihoven namísto statických knihoven snižuje paměť používanou aplikací po spuštění.

Obrázek 2 Aplikace používající dynamické knihovny

Při použití dynamických knihoven mohou programy využívat vylepšení knihoven, které používají automaticky, protože jejich propojení s knihovnami je dynamické, nikoli statické. To znamená, že funkčnost klientských aplikací lze vylepšovat a rozšiřovat, aniž by vývojáři aplikací museli aplikace překompilovávat. Aplikace napsané pro systém OS X tuto funkci využívají, protože všechny systémové knihovny v systému OS X jsou dynamické knihovny. Takto mohou aplikace využívající technologie Carbon nebo Cocoa těžit z vylepšení systému OS X.

Další výhodou dynamických knihoven je, že mohou být inicializovány při načítání a mohou provádět úklidové úlohy při normálním ukončení klientské aplikace. Statické knihovny tuto vlastnost nemají. Podrobnosti naleznete v části Inicializátory a finalizátory modulů.

Jedním z problémů, na který musí vývojáři při vývoji dynamických knihoven pamatovat, je zachování kompatibility s klientskými aplikacemi při aktualizaci knihovny. Protože knihovna může být aktualizována bez vědomí vývojáře klientské aplikace, musí být aplikace schopna používat novou verzi knihovny beze změn svého kódu. Za tímto účelem by se nemělo měnit rozhraní API knihovny. Existují však případy, kdy vylepšení vyžadují změny API. V takovém případě musí v počítači uživatele zůstat předchozí verze knihovny, aby klientská aplikace správně fungovala. Tématem řízení kompatibility s klientskými aplikacemi v průběhu vývoje dynamické knihovny se zabývají Pokyny pro návrh dynamické knihovny

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.