Junior
Qaysi kutubxonalar turini bilasiz va ularning farqlari nima?
sobes.tech AI
AIdan javob
Kutubxonalar turlari:
- Statik kutubxonalar (.a Linuxda, .lib Windowsda): Kutubxona kodi to'g'ridan-to'g'ri ilovaning bajariladigan faylga kompilyatsiya paytida qo'shiladi. Ilova kattaroq bo'ladi, ammo u tizimda kutubxona mavjudligiga bog'liq emas. Statik kutubxonadan foydalanadigan har bir ilova o'zining kod nusxasiga ega.
- Dinamik (ulashgan) kutubxonalar (.so Linuxda, .dll Windowsda): Kutubxona kodi bajarilish paytida ilova xotirasiga yuklanadi. Bu ilovaning bajariladigan fayl hajmini kamaytiradi. Bir nechta ilova bir xil kutubxona nusxasidan foydalanishi mumkin, bu esa xotirani tejaydi. To'g'ri ishlashi uchun, dinamik kutubxona tizimda mavjud bo'lishi kerak.
Asosiy farqlar:
| Xususiyat | Statik kutubxona | Dinamik kutubxona |
|---|---|---|
| Ilovaning hajmi | Kattaroq (kod qo'shilgan) | Kichikroq (kod bajarilish paytida yuklanadi) |
| Bog'liqlik | Yo'q (kod bajariladigan faylda) | Mavjud (kutubxona tizimda bo'lishi kerak) |
| Xotira ishlatish | Har bir ilova o'zining kod nusxasiga ega | Bir nechta ilova bir xil nusxadan foydalanishi mumkin |
| Kodni yangilash | Ilovani qayta kompilyatsiya qilishni talab qiladi | Kutubxona alohida yangilanishi mumkin |
Statik kutubxona misoli (shartli):
// main.cpp
#include "static_library.h" // Statik kutubxona sarlavha fayli
int main() {
// Statik kutubxona funksiyasini chaqirish
static_function();
return 0;
}
Dinamik kutubxona misoli (shartli):
// main.cpp
#include <dlfcn.h> // Dinamik kutubxonalarni yuklash uchun funksiyalar
int main() {
// Dinamik kutubxonani yuklash
void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
if (!handle) {
// Xato bilan ishlash
}
// Kutubxonadan funksiyaning manzilini olish
void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
if (!dynamic_function) {
// Xato bilan ishlash
}
// Funktsiyani chaqirish
dynamic_function();
// Kutubxonani yopish
dlclose(handle);
return 0;
}