Sobes.tech
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;
}