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