2010-09-02 23 views

Odpowiedz

8

Biblioteka statyczna jest mniej więcej zbiorem plików obiektów. Jeśli chcesz użyć biblioteki statycznej w programie, musisz połączyć z nią plik wykonywalny. Plik wykonywalny będzie zawierał bibliotekę statyczną (lub użyte części).

Jeśli chcesz załadować bibliotekę statyczną w środowisku wykonawczym przy użyciu dlopen, musisz najpierw utworzyć bibliotekę dynamiczną zawierającą ją bibliotekę libfoo.so.

+0

To obejście oznacza, że ​​musiałbym utworzyć bibliotekę współdzieloną z biblioteki statycznej, jeśli chcę ją dynamicznie ładować. Oznacza to, że dynamiczne ładowanie biblioteki statycznej nie jest możliwe i że do dynamicznego ładowania mogą być używane tylko biblioteki współużytkowane? Jeśli tak, to cytat, który podałem ze źródła, jest nieprawidłowy. –

+0

Cytowany tekst jest niepoprawny lub źle interpretuję jego znaczenie. – JesperE

4

Otwieranie pliku .a korzystając dlopen robi nie pracy (testowane na Ubuntu 10.04). Dzięki poniższym przykładzie programu:

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

int main() 
{ 
    void *lib_handle = dlopen("/usr/lib/libz.a",RTLD_LAZY); 
    printf("dlopen error=%s\n",dlerror()); 

    printf("lib_handle=%p\n",lib_handle); 
} 

uzyskać:

dlopen error=/usr/lib/libz.a: invalid ELF header 
lib_handle=(nil) 

natomiast podczas korzystania /usr/lib/libz.so zamiast uzyskać:

dlopen error=(null) 
lib_handle=0x19d6030 

więc ten sam kod działa dla wspólnego obiektu.

Powiązane problemy