Mi a dinamikus könyvtárak?
Az alkalmazás legtöbb funkcióját futtatható kódot tartalmazó könyvtárakban valósítják meg. Amikor egy alkalmazást statikus linkelő segítségével összekapcsolunk egy könyvtárral, az alkalmazás által használt kódot átmásoljuk a generált végrehajtható fájlba. A statikus linkelő a lefordított forráskódot, az úgynevezett objektumkódot és a könyvtári kódot egyetlen végrehajtható fájlba gyűjti össze, amely futáskor teljes egészében betöltődik a memóriába. Azt a fajta könyvtárat, amely az alkalmazás futtatható fájljának részévé válik, statikus könyvtárnak nevezzük. A statikus könyvtárak objektumfájlok gyűjteményei vagy archívumai.
Az alkalmazás indításakor az alkalmazás kódja – amely tartalmazza a statikus könyvtárak kódját is, amelyekkel összekapcsolásra került – betöltődik az alkalmazás címtartományába. Sok statikus könyvtár összekapcsolása egy alkalmazásba nagyméretű futtatható alkalmazásfájlokat eredményez. Az 1. ábra egy olyan alkalmazás memóriahasználatát mutatja, amely statikus könyvtárakban megvalósított funkciókat használ. A nagy futtatható állományokkal rendelkező alkalmazások lassú indítási idővel és nagy memóriaigénnyel küzdenek. Továbbá, amikor egy statikus könyvtár frissül, az ügyfélalkalmazások nem részesülnek a benne végrehajtott fejlesztésekből. Ahhoz, hogy hozzáférjen a továbbfejlesztett funkciókhoz, az alkalmazás fejlesztőjének az alkalmazás objektumfájljait a könyvtár új verziójával kell összekapcsolnia. Az alkalmazások felhasználóinak pedig le kell cserélniük az alkalmazás másolatát a legújabb verzióra. Ezért egy alkalmazás naprakészen tartása a statikus könyvtárak által biztosított legújabb funkciókkal mind a fejlesztők, mind a végfelhasználók számára zavaró munkát igényel.
A jobb megközelítés az, ha egy alkalmazás akkor tölt be kódot a címtartományába, amikor arra ténylegesen szükség van, akár indításkor, akár futáskor. Az ilyen rugalmasságot biztosító könyvtártípust dinamikus könyvtárnak nevezzük. A dinamikus könyvtárakat nem kötik be statikusan az ügyfélalkalmazásokba; nem válnak a futtatható fájl részévé. Ehelyett a dinamikus könyvtárakat vagy az alkalmazás indításakor, vagy futás közben lehet betölteni (és linkelni) az alkalmazásba.
A 2. ábra azt mutatja, hogy egyes funkciók dinamikus könyvtárakként való megvalósítása statikus könyvtárak helyett hogyan csökkenti az alkalmazás által használt memóriát az indítás után.
A dinamikus könyvtárak használatával a programok automatikusan részesülhetnek az általuk használt könyvtárak javításaiból, mivel a könyvtárakhoz való linkelés dinamikus, nem statikus. Ez azt jelenti, hogy az ügyfélalkalmazások funkcionalitása javítható és bővíthető anélkül, hogy az alkalmazásfejlesztőknek újra kellene fordítaniuk az alkalmazásokat. Az OS X-re írt alkalmazásoknak előnyös ez a funkció, mivel az OS X összes rendszerkönyvtára dinamikus könyvtár. A Carbon vagy Cocoa technológiát használó alkalmazások így részesülnek az OS X javításaiból.
A dinamikus könyvtárak további előnye, hogy betöltésükkor inicializálhatók, és a kliensalkalmazás normál befejezésekor tisztítási feladatokat végezhetnek. A statikus könyvtárak nem rendelkeznek ezzel a funkcióval. A részleteket lásd a Modul inicializátorok és finalizátorok című fejezetben.
A dinamikus könyvtárak fejlesztésekor a fejlesztőknek szem előtt kell tartaniuk a kliensalkalmazásokkal való kompatibilitás fenntartását a könyvtár frissítésekor. Mivel egy könyvtár az ügyfél-alkalmazás fejlesztőjének tudta nélkül frissülhet, az alkalmazásnak képesnek kell lennie arra, hogy a könyvtár új verzióját a saját kódjának módosítása nélkül használja. Ennek érdekében a könyvtár API-ja nem változhat. Vannak azonban olyan esetek, amikor a fejlesztések API-változtatásokat igényelnek. Ebben az esetben a könyvtár korábbi verziójának a felhasználó számítógépén kell maradnia ahhoz, hogy az ügyfélalkalmazás megfelelően fusson. A dinamikus könyvtárak tervezési útmutatója az ügyfélalkalmazásokkal való kompatibilitás kezelésének témáját vizsgálja a dinamikus könyvtárak fejlődése során.