table of contents
| DLOPEN(3) | Podręcznik programisty Linuksa | DLOPEN(3) | 
NAZWA¶
dlclose, dlerror, dlopen, dlsym - interfejs programisty dla dynamicznie konsolidującego loaderaSKŁADNIA¶
#include <dlfcn.h>OPIS¶
Uwaga! To tłumaczenie może być nieaktualne! dlopen ładuje bibliotekę dynamiczną z pliku, o nazwie zawartej w zakończonym znakiem NUL łańcuchu filename i zwraca nieprzezroczysty "uchwyt" dla tej biblioteki dynamicznej. Jeśli filename nie jest ścieżką absolutną (np. nie rozpoczyna się od "/"), to plik jest poszukiwany w następujących miejscach:
Rozdzielonej dwukropkami liście katalogów, zdefiniowanej w zmiennej
  środowiskowej LD_LIBRARY_PATH.
Liście bibliotek podanej w /etc/ld.so.cache.
/lib, a potem w /usr/lib.
Jeśli filename jest wskaźnikiem NULL, to zwracany uchwyt
  wskazuje na program główny.
Zewnętrzne odniesienia biblioteki są rozstrzygane przy użyciu
  bibliotek z listy zależności danej biblioteki, oraz przy użyciu
  wszystkich innych bibliotek, otwartych wcześniej ze znacznikiem
  RTLD_GLOBAL. Jeśli plik wykonywalny był skonsolidowany z
  opcją "-rdynamic", to globalne symbole pliku wykonywalnego
  będą także używane do rozstrzygania odniesień
  dynamicznie załadowanych bibliotek.
flag powinna być albo RTLD_LAZY, oznaczającym
  rozwiązywanie niezdefiniowanych symboli podczas wywoływania
  biblioteki dynamicznej, albo RTLD_NOW, oznaczającym
  rozwiązanie wszystkich niezdefiniowanych symboli zanim dlopen
  powróci i nie powiedzie się, jeśli nie można tego
  dokonać. Ewentualnie można wykonać operację OR na
  parametrze flag, i symbolu RTLD_GLOBAL, oznaczającym,
  że symbole zewnętrzne, zdefiniowane w bibliotece będą
  udostępniane kolejno ładowanym bibliotekom.
Jeśli biblioteka eksportuje funkcję o nazwie _init, to jej kod
  jest wykonywany przed powrotem dlopen. Jeśli ta sama biblioteka jest
  załadowana przez dlopen() dwukrotnie, to zwracany jest ten sam
  uchwyt. Biblioteka dl obsługuje liczniki dowiązań dla
  uchwytów plików dynamicznych, tak więc biblioteka dynamiczna
  nie będzie zdealokowana nim tylokrotnie nie zostanie wywołana
  funkcja dlclose, ilokrotnie użyto dlopen.
Jeśli dlopen z jakiejś przyczyny zawiedzie, to zwraca NULL.
  Czytelny dla człowieka napis, zawierający opis ostatniego
  błędu, który pojawił się w którejś z
  funkcji dl (dlopen, dlsym lub dlclose), można wyciągnąć
  przy użyciu dlerror(). dlerror zwraca NULL, jeśli od
  czasu inicjalizacji lub poprzedniego wywołania dlerror nie
  wystąpił błąd. (Wywołanie dlerror() dwa razy
  pod rząd zawsze spowoduje, że drugie wywołanie zwróci
  NULL.)
WARTOŚĆ ZWRACANA¶
dlclose zwraca 0 przy pomyślnym zakończeniu, z wartość niezerową w przypadku błędu.PRZYKŁAD¶
Załadowanie biblioteki matematycznej i wypisanie cosinusa liczby 2.0:#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
    void *handle;
    double (*cosine)(double);
    char *error;
    handle = dlopen ("libm.so", RTLD_LAZY);
    if (!handle) {
        fprintf(stderr, "%s\n", dlerror());
        exit(1);
    }
    cosine = dlsym(handle, "cos");
    if ((error = dlerror()) != NULL)  {
        fprintf (stderr, "%s\n", error);
        exit(1);
    }
    printf ("%f\n", (*cosine)(2.0));
    dlclose(handle);
    return 0;
}
gcc -rdynamic -o foo foo.c -ldl
UWAGI¶
Symbole RTLD_DEFAULT i RTLD_NEXT są zdefiniowane w <dlfcn.h> tylko wtedy, gdy _GNU_SOURCE było zdefiniowane przed jego włączeniem. Standard interfejsu dlopen pochodzi z SunOS.ZOBACZ TAKŻE¶
ld(1), ld.so(8), ldconfig(8), ldd(1), ld.so.infoINFORMACJE O TŁUMACZENIU¶
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne. W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:- man --locale=C 3 dlopen
 
| 2001-12-14 | Linux |