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;
}