CodeBlanks Logo Icon CodeBlanks

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

main.c
#include <stdio.h>
#include <dlfcn.h>

// kütüphane yüklenir
// durum yazdır
// kapat

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#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ı

Soru
void *h = dlopen(NULL, ____);
Cevap
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

İleri seviye bölümündeki tüm dersler