dlopen
- C kursu
- İleri seviye
- Ders 49/83
- 5 dk
dlopen ile dinamik kütüphane yüklemeyi öğrenirsin.
dlopen nedir?
dlopen, çalışma zamanında paylaşılan kütüphane (.so) yükleyen POSIX çağrısıdır. <dlfcn.h> başlığında tanımlıdır. void *h = dlopen(path, flags) ile kütüphane yükler; dönüş NULL ise hata oluşmuştur.
path yerine NULL verirsen ana programın sembollerine bir tanıtıcı alırsın; bu, test için uygundur. flags ya RTLD_LAZY (semboller ilk kullanımda çözümlenir) ya RTLD_NOW (hepsi hemen çözümlenir) olur. RTLD_LAZY hızlı başlangıç verir. İş bitince dlclose(h) ile kütüphaneyi kapatırsın.
Ana programı yükle
Test için en basit desen: void *h = dlopen(NULL, RTLD_LAZY);. Bu, ana programın sembollerine bir tanıtıcı verir. Genellikle başarılıdır çünkü ana program zaten yüklüdür.
Başarı durumunu yazdırmak için printf("yüklendi\n") kullanabilirsin. Sonra if (h) dlclose(h); ile kapatırsın. dlclose tanıtıcıyı kapatır ve referans sayısını azaltır. Bu desenin çıktısı deterministiktir; ortam bağımsızdır. dlclose başarısını denetlemek de iyi bir alışkanlıktır.
Uygulama Kütüphane yüklenin
void *h = dlopen(NULL, RTLD_LAZY); ile ana programın tanıtıcısını al. printf("yüklendi\n"); ile durum yazdır. if (h) dlclose(h); ile kapat.
Başlangıç kodu
#include <stdio.h>
#include <dlfcn.h>
// kütüphane yüklenir
// durum yazdır
// kapat
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <dlfcn.h>
int main(void) {
void *h = dlopen(NULL, RTLD_LAZY);
printf("yüklendi\n");
if (h) dlclose(h);
return 0;
}Beklenen çıktı
yüklendi
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi bayrak sembolleri ilk kullanımda çözer?
- RTLD_LAZY Doğru cevap
- RTLD_NOW
- RTLD_GLOBAL
- RTLD_LOCAL
Açıklama: RTLD_LAZY sembolleri ilk kullanımda çözer; başlangıç hızlıdır.
2 dlopen çağrısı
void *h = dlopen(NULL, ____);
void *h = dlopen(NULL, RTLD_LAZY);
Açıklama: RTLD_LAZY gecikmeli çözümleme yapar.
3 dlopen parçalarını eşle
| Kavram | Anlamı |
|---|---|
dlopen |
Kütüphane yükler |
RTLD_LAZY |
Gecikmeli |
RTLD_NOW |
Hemen |
dlclose |
Kapatır |