Sobes.tech
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;
}