2010-09-02 21 views

risposta

8

Una libreria statica è più o meno solo una raccolta di file oggetto. Se si desidera utilizzare una libreria statica in un programma, è necessario collegare l'eseguibile con esso. L'eseguibile conterrà quindi la libreria statica (o le parti che hai usato).

Se si desidera caricare una libreria statica in fase di esecuzione utilizzando dlopen, sarà prima necessario creare una libreria dinamica libfoo.so che la contenga.

+0

Questa soluzione implica che dovrei creare una libreria condivisa da una libreria statica se voglio caricarla dinamicamente. Ciò significa che caricare una libreria statica in modo dinamico non è possibile e che solo le librerie condivise possono essere utilizzate per il caricamento dinamico? In tal caso, la citazione che ho indicato dalla fonte non è corretta. –

+0

Il testo citato non è corretto, o sto interpretando erroneamente cosa significano. – JesperE

4

L'apertura di un file .a tramite dlopen fa non funziona (testato su Ubuntu 10.04). Con il seguente programma di esempio:

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

ottengo:

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

mentre quando si utilizza /usr/lib/libz.so invece, ottengo:

dlopen error=(null) 
lib_handle=0x19d6030 

così lo stesso codice funziona per un oggetto condiviso.

Problemi correlati