když je kompilován program C, kompilátor generuje objektový kód. Po generování objektového kódu se kompilátor také vyvolá linker. Jedním z hlavních úkolů linker je vytvořit kód knihovních funkcí (např printf(), scanf(), sqrt(), ..atd.) k dispozici pro váš program. Linker může tento úkol splnit dvěma způsoby, zkopírováním funkce kódu knihovny do kódu objektu, nebo provedením některých opatření tak, aby nebyl zkopírován úplný kód knihovních funkcí, ale zpřístupněn za běhu.,
statické propojení a statické knihovny jsou výsledkem vytváření kopie všech použitých knihovních funkcí do spustitelného souboru. Statické propojení vytváří větší binární soubory a potřebuje více místa na disku a hlavní paměti. Příklady statických knihoven (knihovny, které jsou staticky propojeny) jsou, .soubory v Linuxu a .lib soubory v systému Windows.
kroky k vytvoření statické knihovny nám umožňují vytvářet a používat statickou knihovnu v Unixu nebo Unixu jako OS.
1. Vytvořte soubor C, který obsahuje funkce ve vaší knihovně.,div>
#include <stdio.h>
void
fun(
void
)
{
printf
(
"fun() called from a static library"
);
}
We have created only one file for simplicity., Můžeme také vytvořit více souborů v knihovně.
2. Vytvořit hlavičkový soubor pro knihovnu
void
fun(
void
);
3. Zkompilujte soubory knihovny.
gcc -c lib_mylib.c -o lib_mylib.o
4. Vytvořit statickou knihovnu., Tento krok je svazovat více souborů objektů v jedné statické knihovně (podrobnosti viz ar). Výstupem tohoto kroku je statická knihovna.
ar rcs lib_mylib.a lib_mylib.o
5. Nyní je naše statická knihovna připravena k použití. V tomto okamžiku bychom mohli kopírovat lib_mylib.někde jinde ji použít. Pro demo účely ponechme knihovnu v aktuálním adresáři.
Pojďme vytvořit program ovladače, který používá výše vytvořenou statickou knihovnu.
1., Vytvořit soubor C s hlavní funkcí
#include "lib_mylib.h"
void
main()
{
fun();
}
2., Zkompilujte program ovladače.
gcc -c driver.c -o driver.o
3. Propojte zkompilovaný program ovladače se statickou knihovnou. Všimněte si, že-L. se používá k zjištění, že statická knihovna je v aktuální složce(viz podrobnosti o možnostech-L A-l).
gcc -o driver driver.o -L. -l_mylib
4. Spusťte program ovladače
./driver fun() called from a static library
Následují některé důležité body o statických knihovnách.
1. Pro statickou knihovnu je skutečný kód extrahován z knihovny linker a používá se k vytvoření konečného spustitelného souboru v okamžiku kompilace/sestavení aplikace.,
2. Každý proces získá vlastní kopii kódu a dat. Pokud je stejně jako v případě dynamických knihoven sdílen pouze kód, data jsou specifická pro každý proces. Pro statické knihovny jsou stopy paměti větší. Pokud by například byly všechny nástroje okenního systému staticky propojeny, bylo by pro typického uživatele zbytečné několik desítek megabajtů paměti RAM a uživatel by byl zpomalen spoustou stránkování.
3. Vzhledem k tomu, že kód knihovny je připojen v době kompilace, konečný spustitelný soubor nemá žádné závislosti na knihovně v době běhu, tj., žádné další náklady na načítání za běhu, to znamená, že nemusíte nosit kopii knihovny, která se používá, a máte vše pod kontrolou a neexistuje žádná závislost.
4. Ve statických knihovnách, jakmile je vše připojeno do vaší aplikace, nemusíte se obávat, že klient bude mít ve svém systému k dispozici správnou knihovnu (a verzi).
5. Jednou z nevýhod statických knihoven je, že pro každou změnu (up-gradace) ve statických knihovnách musíte pokaždé překompilovat hlavní program.
6., Jednou z hlavních výhod statických knihoven, které jsou preferovány i nyní, je rychlost. Ve statických knihovnách nebude žádné dynamické dotazování symbolů. Mnoho softwaru výrobní linky používá statické knihovny i dnes.
dynamické propojení a dynamické knihovny dynamické propojení nevyžaduje kopírování kódu, provádí se pouze umístěním názvu knihovny do binárního souboru. Skutečné propojení se stane, když je program spuštěn, když je binární soubor i knihovna v paměti. Příklady dynamických knihoven (knihovny, které jsou propojeny za běhu) jsou,. takže v Linuxu a .dll ve Windows.,
brzy budeme pokrývat více bodů dynamických knihoven a kroků k jejich vytvoření.
tento článek je sestaven společností Abhijit Saha a přezkoumán týmem GeeksforGeeks. Napište prosím komentáře, pokud zjistíte něco nesprávného, nebo chcete sdílet více informací o tématu diskutovaném výše.
čtenář pozornosti! Nepřestávej se učit. Získejte všechny důležité koncepty teorie CS pro rozhovory SDE s kurzem teorie CS za studentskou cenu a připravte se na průmysl.