2010-09-02 37 views

Respuesta

8

Una biblioteca estática es más o menos solo una colección de archivos de objeto. Si desea utilizar una biblioteca estática en un programa, debe vincular el archivo ejecutable con ella. El archivo ejecutable contendrá la biblioteca estática (o las partes que utilizó).

Si desea cargar una biblioteca estática en tiempo de ejecución usando dlopen, primero deberá crear una biblioteca dinámica libfoo.so que la contenga.

+0

Esa solución implica que tendría que crear una biblioteca compartida desde una biblioteca estática si quiero cargarla dinámicamente. Esto significa que no es posible cargar dinámicamente una biblioteca estática y que solo se pueden usar bibliotecas compartidas para la carga dinámica. Si es así, la cita que mencioné de la fuente no es correcta. –

+0

El texto citado es incorrecto, o estoy malinterpretando lo que significan. – JesperE

4

Al abrir un archivo .a usando dlopen se no funciona (probado en Ubuntu 10.04). Con el siguiente programa de ejemplo:

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

me sale:

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

mientras que cuando se utiliza /usr/lib/libz.so lugar, me sale:

dlopen error=(null) 
lib_handle=0x19d6030 

por lo que el mismo código funciona para un objeto compartido.

Cuestiones relacionadas