una librerias libreria dinamicas dinamica dev crear creacion compilar como gcc

librerias - cómo vincular la biblioteca estática a la biblioteca dinámica en gcc



creacion de librerias dinamicas en java (2)

Las bibliotecas estáticas tienen reglas especiales cuando se trata de vincular. Un objeto de la biblioteca estática solo se agregará al binario si el objeto proporciona un símbolo no resuelto.

En Linux, puede cambiar ese comportamiento con la --whole-archive linker:

g++ -Wl,--whole-archive some_static_lib.a -Wl,--no-whole-archive

Bajo gcc (g ++), he compilado una biblioteca static .a ( some_static_lib.a ). Quiero vincular (¿es esa la frase correcta?) Con este archivo .a en otra biblioteca dinámica (llámalo libsomeDyn.so ) que estoy creando. Aunque el .so compila, no veo el contenido de .a en .so usando el comando nm :

/ usr / bin / g ++ -fPIC -g -O2 -Wall -Werror -pipe -march = pentium3 -mtune = prescott -MD -D_FILE_OFFSET_BITS = 64 -DLINUX -D_GNU_SOURCE -D_THREAD_SAFE -I ../../../. ./../../../../ -I ../../../../../../../..// libraries -Wl, -rpath, / usr / lib -o libsomeDyn.so some.o another.o some_static_lib.a -shared -Wl -x -Wl, -soname, libsomeDyn.so

No veo funciones en some_static_lib.a en libsomeDyn.so . ¿Qué estoy haciendo mal?


Para cada uno que se encuentra con ese problema como yo (y no ha entendido la respuesta correctamente): aquí hay un breve cómo generar una biblioteca dinámica (libmylib.so) a partir de una estática (mylib.a):

1.) crea un archivo mylib.c que solo importa el archivo mylib.h

2.) compila este mylib.c a mylib.o con

gcc -c -fPIC mylib.c -o msat.o

3.) generar una biblioteca dinámica con el siguiente comando:

gcc --whole-archive -shared -Wl,-soname,libmylib.so -o libmylib.so mylib.o mylib.a

Eso funcionó al menos para mí, convirtiendo una biblioteca estática (compilada con -fPIC) en una biblioteca dinámica. No estoy seguro de si esto funcionará para otras bibliotecas.