Sobes.tech
Junior

Kokius bibliotekų tipus žinote ir kuo jie skiriasi?

sobes.tech AI

Atsakymas iš AI

Bibliotekų tipai:

  • Statinės bibliotekos (.a Linux, .lib Windows): Bibliotekos kodas tiesiogiai įtraukiamas į programos vykdomąjį failą kompiliacijos metu. Programa tampa didesnė, tačiau nepriklauso nuo bibliotekos buvimo sistemoje vykdymo metu. Kiekviena programa, naudojanti statinę biblioteką, turi savo kopiją kodo.
  • Dinaminės (dalijamos) bibliotekos (.so Linux, .dll Windows): Bibliotekos kodas įkeliama į programos atmintį vykdymo metu. Tai sumažina programos vykdomojo failo dydį. Kelios programos gali naudoti tą pačią bibliotekos kopiją, taupant atmintį. Norint tinkamai veikti, dinaminė biblioteka turi būti sistemoje.

Pagrindiniai skirtumai:

Bruožas Statinė biblioteka Dinaminė biblioteka
Programos dydis Didesnis (kodas įtrauktas) Mažesnis (kodas įkeltas vykdymo metu)
Priklausomybė Nėra (kodas viduje vykdomajame faile) Yra (biblioteka turi būti sistemoje)
Atminties naudojimas Kiekviena programa turi savo kopiją Kelios programos gali naudoti tą pačią kopiją
Kodo atnaujinimas Reikalauja perkompiliuoti programą Gali būti atnaujinta atskirai, biblioteka

Pavyzdys, kaip naudoti statinę biblioteką C++ (sąlyginis):

// main.cpp
#include "static_library.h" // Statinės bibliotekos antraštės failas

int main() {
  // Kviečiame funkciją iš statinės bibliotekos
  static_function();
  return 0;
}

Pavyzdys, kaip naudoti dinaminę biblioteką C++ (sąlyginis):

// main.cpp
#include <dlfcn.h> // Dinaminės bibliotekos įkėlimo funkcijos

int main() {
  // Dinaminės bibliotekos įkėlimas
  void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
  if (!handle) {
    // Klaidos apdorojimas
  }

  // Funkcijos adreso gavimas iš bibliotekos
  void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
  if (!dynamic_function) {
    // Klaidos apdorojimas
  }

  // Funkcijos iškvietimas
  dynamic_function();

  // Bibliotekos uždarymas
  dlclose(handle);

  return 0;
}