Bajo gcc (g ++), he compilado una biblioteca estática .a
(llámalo some_static_lib.a
). Quiero vincular (¿es esa la frase correcta?) Este archivo .a
en otra biblioteca dinámica (llámalo libsomeDyn.so
) que estoy creando. Aunque el .so
compila, no veo contenido de .a
bajo .so
usando nm
comando:cómo vincular la biblioteca estática a la biblioteca dinámica en gcc
/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 alguna.o otra.o some_static_lib.a -shared -Wl -x - Wl, -soname, libsomeDyn.so
No veo las funciones en some_static_lib.a
en libsomeDyn.so
. ¿Qué estoy haciendo mal?
Tengo una dependencia extraña en la biblioteca estática. Hace referencia a una función incluida en la biblioteca dinámica. ¿Cómo le digo a gcc que encuentre la referencia indefinida dentro de la biblioteca dinámica? Gracias – bob
@bob - no debería haber ningún problema con la biblioteca estática que hace referencia a un símbolo dentro de la biblioteca dinámica (una vez que vincula una biblioteca estática, es exactamente lo mismo que si directamente hace referencia al .o en la línea de comandos). Sospecho que debe haber algún otro problema y recomiendo publicar una nueva pregunta. –
Fue la solución para mí, pero en OSX tuve que usar '-all_load' como equivalente a' --whole-archive' como alguien me sugirió en el IRC. ¡Espero que pueda ayudar a alguien más! – vmonteco