Sobes.tech
Junior

Hangi tür kütüphaneleri biliyorsunuz ve aralarındaki farklar nelerdir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kütüphane türleri:

  • Statik kütüphaneler (.a Linux'ta, .lib Windows'ta): Kütüphane kodu, derleme sırasında doğrudan uygulamanın çalıştırılabilir dosyasına gömülür. Uygulama boyutu artar, ancak çalışma zamanında sistemde kütüphanenin varlığına bağlı değildir. Statik kütüphane kullanan her uygulama, kendi kod kopyasına sahiptir.
  • Dinamik (paylaşılan) kütüphaneler (.so Linux'ta, .dll Windows'ta): Kütüphane kodu, çalışma sırasında uygulama belleğine yüklenir. Bu, uygulamanın çalıştırılabilir dosya boyutunu küçültür. Birden fazla uygulama aynı kütüphane kopyasını kullanabilir, bu da belleği tasarruf sağlar. Uygulamanın düzgün çalışması için, dinamik kütüphanenin sistemde bulunması gerekir.

Ana farklar:

Özellik Statik kütüphane Dinamik kütüphane
Uygulama boyutu Daha büyük (kod gömülü) Daha küçük (kod çalışma zamanında yüklenir)
Bağımlılık Yok (kod çalıştırılabilir dosyada) Var (kütüphane sistemde olmalı)
Bellek kullanımı Her uygulama kendi kod kopyasına sahiptir Birden fazla uygulama aynı kütüphane kopyasını kullanabilir
Kod güncelleme Uygulamayı yeniden derlemeyi gerektirir Kütüphane ayrı güncellenebilir

Statik kütüphane kullanımına örnek (şartlı):

// main.cpp
#include "static_library.h" // Statik kütüphane başlık dosyası

int main() {
  // Statik kütüphane fonksiyonunu çağır
  static_function();
  return 0;
}

Dinamik kütüphane kullanımına örnek (şartlı):

// main.cpp
#include <dlfcn.h> // Dinamik kütüphane yükleme fonksiyonları için

int main() {
  // Dinamik kütüphaneyi yükle
  void* handle = dlopen("dynamic_library.so", RTLD_LAZY);
  if (!handle) {
    // Hata işle
  }

  // Kütüphanedeki fonksiyonun adresini al
  void (*dynamic_function)(void) = (void (*)(void))dlsym(handle, "dynamic_function");
  if (!dynamic_function) {
    // Hata işle
  }

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

  // Kütüphaneyi kapat
  dlclose(handle);

  return 0;
}