Sobes.tech
Junior

Kādus bibliotēku veidus jūs zināt un kādas ir to atšķirības?

sobes.tech AI

Atbilde no AI

Bibliotēku veidi:

  • Statiskās bibliotēkas (.a Linux, .lib Windows): Bibliotēkas kods tiek tieši iekļauts lietojumprogrammas izpildāmajā failā kompilācijas laikā. Programma kļūst lielāka, bet nav atkarīga no bibliotēkas klātbūtnes sistēmā izpildes laikā. Katra programma, kas izmanto statisko bibliotēku, ir ar savu koda kopiju.
  • Dinamikās (dalītās) bibliotēkas (.so Linux, .dll Windows): Bibliotēkas kods tiek ielādēts lietojumprogrammas atmiņā izpildes laikā. Tas samazina izpildāmo failu izmēru. Vairāmas programmas var izmantot vienu un to pašu bibliotēkas kopiju, taupot atmiņu. Lai programma darbotos pareizi, dinamikā bibliotēka ir jābūt sistēmā.

Galvenās atšķirības:

Raksturlielums Statiskā bibliotēka Dinamiskā bibliotēka
Programmas izmērs Lielāks (kods iekļauts) Mazāks (kods tiek ielādēts izpildes laikā)
Atkarība Nav (kods iekšā izpildāmajā failā) Ir (bibliotēka jābūt sistēmā)
Atmiņas izmantošana Katru programmu ir sava koda kopija Vairāmas programmas var izmantot vienu kopiju
Koda atjaunināšana Prasa pārkompilāciju Var atjaunināt atsevišķi, bibliotēku

Piemērs, kā izmantot statisko bibliotēku C++ (pēc pieprasījuma):

// main.cpp
#include "static_library.h" // Statiskās bibliotēkas galvenes fails

int main() {
  // Izsauc funkciju no statiskās bibliotēkas
  static_function();
  return 0;
}

Piemērs, kā izmantot dinamisko bibliotēku C++ (pēc pieprasījuma):

// main.cpp
#include <dlfcn.h> // Dinamisko bibliotēku ielādes funkcijas

int main() {
  // Dinamiskās bibliotēkas ielāde
  void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
  if (!handle) {
    // Kļūdas apstrāde
  }

  // Funkcijas adreses iegūšana no bibliotēkas
  void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
  if (!dynamic_function) {
    // Kļūdas apstrāde
  }

  // Funkcijas izsaukšana
  dynamic_function();

  // Bibliotēkas aizvēršana
  dlclose(handle);

  return 0;
}