Sobes.tech
Junior

Koje vrste biblioteka poznajete i u čemu se razlikuju?

sobes.tech АИ

Одговор од АИ

Vrste biblioteka:

  • Statističke biblioteke (.a na Linuxu, .lib na Windows): Kod biblioteke se direktno ugrađuje u izvršnu datoteku aplikacije tokom kompilacije. Aplikacija postaje veća, ali ne zavisi od prisustva biblioteke u sistemu tokom izvršavanja. Svaka aplikacija koja koristi statičku biblioteku ima svoju kopiju koda.
  • Dinamičke (deljene) biblioteke (.so na Linuxu, .dll na Windowsu): Kod biblioteke se učitava u memoriju aplikacije tokom izvršavanja. To smanjuje veličinu izvršne datoteke aplikacije. Više aplikacija može koristiti istu kopiju biblioteke, štedeći memoriju. Za ispravan rad, dinamička biblioteka mora biti prisutna u sistemu.

Glavne razlike:

Osobina Statistička biblioteka Dinamička biblioteka
Veličina aplikacije Veća (kod ugrađen) Manja (kod se učitava tokom izvršavanja)
Zavisnost Nepostojanje (kod unutar izvršne datoteke) Postojanje (biblioteka mora biti u sistemu)
Upotreba memorije Svaka aplikacija ima svoju kopiju koda Više aplikacija može koristiti istu kopiju
Ažuriranje koda Zahteva ponovnu kompilaciju aplikacije Biblioteka se može ažurirati odvojeno

Primer korišćenja statičke biblioteke u C++ (uslovno):

// main.cpp
#include "static_library.h" // Zaglavlje statičke biblioteke

int main() {
  // Poziv funkcije iz statičke biblioteke
  static_function();
  return 0;
}

Primer korišćenja dinamičke biblioteke u C++ (uslovno):

// main.cpp
#include <dlfcn.h> // Za funkcije za učitavanje dinamičkih biblioteka

int main() {
  // Učitavanje dinamičke biblioteke
  void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
  if (!handle) {
    // Obrada greške
  }

  // Dobijanje adrese funkcije iz biblioteke
  void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
  if (!dynamic_function) {
    // Obrada greške
  }

  // Pozivanje funkcije
  dynamic_function();

  // Zatvaranje biblioteke
  dlclose(handle);

  return 0;
}