Sobes.tech
Junior

Aké druhy knižníc poznáte a v čom sa líšia?

sobes.tech AI

Odpoveď od AI

Typy knižníc:

  • Statické knižnice (.a v Linuxe, .lib vo Windows): Kód knižnice je priamo začlenený do spustiteľného súboru aplikácie počas kompilácie. Aplikácia je väčšia, ale nezávisí od prítomnosti samotnej knižnice v systéme počas behu. Každá aplikácia používajúca statickú knižnicu má vlastnú kópiu kódu.
  • Dynamické (zdieľané) knižnice (.so v Linuxe, .dll vo Windows): Kód knižnice sa načíta do pamäte aplikácie počas behu. To znižuje veľkosť spustiteľného súboru aplikácie. Niekoľko aplikácií môže používať rovnakú kópiu knižnice, čo šetrí pamäť. Pre správnu funkciu aplikácie musí byť dynamická knižnica prítomná v systéme.

Hlavné rozdiely:

Prvok Statická knižnica Dynamická knižnica
Veľkosť aplikácie Väčšia (kód začlenený) Menšia (kód sa načítava počas behu)
Závislosť Neexistuje (kód je vo vnútri spustiteľného súboru) Existuje (knižnica musí byť v systéme)
Použitie pamäti Každá aplikácia má vlastnú kópiu kódu Viaceré aplikácie môžu používať jednu kópiu
Aktualizácia kódu Vyžaduje prekompiláciu aplikácie Môže byť aktualizovaná samostatne

Príklad použitia statickej knižnice v C++ (podmienený):

// main.cpp
#include "static_library.h" // Hlavičkový súbor statickej knižnice

int main() {
  // Volanie funkcie zo statickej knižnice
  static_function();
  return 0;
}

Príklad použitia dynamickej knižnice v C++ (podmienený):

// main.cpp
#include <dlfcn.h> // Pre funkcie načítania dynamických knižníc

int main() {
  // Načítanie dynamickej knižnice
  void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
  if (!handle) {
    // Spracovanie chyby
  }

  // Získanie adresy funkcie z knižnice
  void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
  if (!dynamic_function) {
    // Spracovanie chyby
  }

  // Volanie funkcie
  dynamic_function();

  // Zatvorenie knižnice
  dlclose(handle);

  return 0;
}