Junior
Jaké druhy knihoven znáte a v čem se liší?
sobes.tech AI
Odpověď od AI
Typy knihoven:
- Statické knihovny (.a v Linuxu, .lib ve Windows): Kód knihovny je přímo začleněn do spustitelného souboru aplikace při kompilaci. Aplikace je větší, ale nezávisí na přítomnosti knihovny v systému při běhu. Každá aplikace používající statickou knihovnu má vlastní kopii kódu.
- Dynamické (sdílené) knihovny (.so v Linuxu, .dll ve Windows): Kód knihovny je načítán do paměti aplikace při běhu. To snižuje velikost spustitelného souboru. Více aplikací může sdílet stejnou kopii knihovny, což šetří paměť. Pro správnou funkci musí být dynamická knihovna přítomna v systému.
Hlavní rozdíly:
| Vlastnost | Statická knihovna | Dynamická knihovna |
|---|---|---|
| Velikost aplikace | Větší (kód začleněn) | Menší (kód načítán při běhu) |
| Závislost | Neexistuje (kód uvnitř spustitelného souboru) | Existuje (knihovna musí být v systému) |
| Použití paměti | Každá aplikace má vlastní kopii kódu | Více aplikací může sdílet jednu kopii |
| Aktualizace kódu | Vyžaduje překompletaci aplikace | Knihovna může být aktualizována samostatně |
Příklad použití statické knihovny v C++ (podmíněně):
// main.cpp
#include "static_library.h" // Hlavičkový soubor statické knihovny
int main() {
// Volání funkce ze statické knihovny
static_function();
return 0;
}
Příklad použití dynamické knihovny v C++ (podmíněně):
// main.cpp
#include <dlfcn.h> // Pro načítání dynamických knihoven
int main() {
// Načtení dynamické knihovny
void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
if (!handle) {
// Zpracování chyby
}
// Získání adresy funkce z knihovny
void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
if (!dynamic_function) {
// Zpracování chyby
}
// Volání funkce
dynamic_function();
// Zavření knihovny
dlclose(handle);
return 0;
}