Toto je věc, které se týká c, ale v žádných učebnicích c ji nenajdete. Je to totiž čistě unixová záležitost. O co jde? Pokud děláte větší projekt složený z více programů, tak nejdříve všechny zkompilujete do přenosných objektových souborů *.o a ty pak slinkujete do jednoho výstupního programu. Knihovna v linuxu znamená složení více takových objektových souborů do jednoho celku. Určitě jste už setkali s linkováním knihoven. Je to parametr -l. Pokud se podíváte do adresáře /usr/lib (resp. /usr/local/lib), tak zjistíte, že se programy jmenují většinou libneco.so nebo libneco.a. Takovou knihovnu nalinkujete přes parametr -lneco
Teď už se pustíme do demonstračního příkladu
výpis main.c: #include <stdio.h> #include "message.h" int main() { proved(80); return 0; } výpis message.c: #include <stdio.h> #include "message.h" #include "count.h" int proved(int x) { printf("Sinus z x je %5.5f",vratsin(x)); return 0; } výpis message.h: int proved(int x); výpis count.c: #include <stdio.h> #include <math.h> #include "count.h" float vratsin(int x) { return sin(x); } výpis count.h float vratsin(int x);(Omluvte absurditu příkladu. Myslím, že demonstrační funkci ale plní.)
Statická knihovna se do výsledného programu vloží. To znamená, že program bude větší a hůře aktualizovatelný. Na druhou stranu nebudou problémy z přenositelností, protože program bude pracovat bez zvláštních potřeb po systému. Takové programy se někdy i distribuují. Příklad je třeba prohlížeč obrázků XnView. Program používá grafickou knihovnu Motif. Můžete se rozhodnout, jestli chcete normální verzi, která předpokládá, že máte knihovnu Motif ve vlastním systému (čemuž tak většinou je). Můžete si také stáhnout static verzi balíku. To znamená, že prostředí Motif je zakomponováno v programu - s tím samozřejmě roste velikost, ale také jistota, že program poběží všude.
Dynamická knihovna stejně jako statická obsahuje sadu objektových souborů *.o. Při slinkování s programem se ale do programu nevloží objekty, ale pouze jejich jména cesty, kde je má program najít. Program hledá v systémových adresářích a v adresářích uvedených v proměnné $LD_LIBRARY_PATH.
Výhoda dynamických knihoven je v tom, že program, který je používá je hodně menší než static verze, ale zase není jisté, že knihovna v systému bude. U knihoven jako libz, libgtk nebo libcrypt je jasné, že je bude systém obsahovat. Někdy to však jisté není. Obecně nedoporučuji používat static programy a spíše si nové knihovny stáhnout. Další výhodou je lehlá aktualizace. Pokud někdo vyvine novou verzi dynamické knihovny, tak se nemusí program používající knihovnu překompilovávat.