Sobes.tech
Junior

Hansı növ kitabxanaları bilirsiniz və onların fərqləri nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Kitabxana növləri:

  • Statik kitabxanalar (.a Linux-də, .lib Windows-də): Kitabxananın kodu birbaşa tətbiqin icra faylına yığılır. Tətbiq ölçüsü böyüyür, amma işləmə zamanı sistemdə kitabxananın mövcudluğuna bağlı deyil. Statik kitabxanadan istifadə edən hər bir tətbiqin öz kod nüsxəsi var.
  • Dinamik (paylaşılan) kitabxanalar (.so Linux-də, .dll Windows-də): Kitabxananın kodu işləmə zamanı tətbiqin yaddaşına yüklənir. Bu, tətbiqin icra faylının ölçüsünü azaldır. Bir neçə tətbiq eyni kitabxananın nüsxəsini istifadə edə bilər, bu da yaddaşdan qənaət edir. Doğru işləməsi üçün, dinamik kitabxana sistemdə mövcud olmalıdır.

Əsas fərqlər:

Xüsusiyyət Statik kitabxana Dinamik kitabxana
Tətbiqin ölçüsü Daha böyük (kod daxil edilir) Daha kiçik (kod işləmə zamanı yüklənir)
Asılılıq Yox (kod icra faylında) Mövcuddur (kitabxana sistemdə olmalıdır)
Yaddaş istifadəsi Hər tətbiqin öz kod nüsxəsi var Bir neçə tətbiq eyni nüsxəni istifadə edə bilər
Kodun yenilənməsi Yenidən tərtib tələb edir Kitabxana ayrıca yenilənə bilər

Statik kitabxananın istifadəsinə nümunə (şərti):

// main.cpp
#include "static_library.h" // Statik kitabxananın başlıq faylı

int main() {
  // Statik kitabxanadan funksiyanı çağır
  static_function();
  return 0;
}

Dinamik kitabxananın istifadəsinə nümunə (şərti):

// main.cpp
#include <dlfcn.h> // Dinamik kitabxanaları yükləmək üçün funksiyalar

int main() {
  // Dinamik kitabxananı yüklə
  void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
  if (!handle) {
    // Xəta ilə işləmə
  }

  // Kitabxanadan funksiyanın ünvanını al
  void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
  if (!dynamic_function) {
    // Xəta ilə işləmə
  }

  // Funksiyanı çağır
  dynamic_function();

  // Kitabxananı bağla
  dlclose(handle);

  return 0;
}