con crvs liba.a liba1.a liba2.a
gcc -shared -o liban.so an.c liba.a
Generalmente, solo los símbolos utilizados en la biblioteca dinámica se exportarán de la biblioteca estática y se exportará todo el archivo de objeto que contiene el símbolo.
Cómo resolver el problema de que los símbolos de las bibliotecas estáticas no se pueden exportar:
1) Llamar a la biblioteca dinámica
2) Extraiga todos los archivos de objetos de la biblioteca estática y luego compile la biblioteca dinámica
3) Opción de enlace, controlar todas las exportaciones -Wl, --whole-archive -Wl, --no-whole-archive Se exportan todos los símbolos de la biblioteca estática entre las opciones.
Ejemplos:
Los archivos de origen a1.c, a2.c, an.c y an_call.c se componen de la siguiente manera: archivos de destino a1.o, a2.o; archivos de biblioteca estática liba.a; archivos de biblioteca dinámica liban.so, liban_call. entonces, liban_opt .so;
a1.c:
a2.c:
Congreso Nacional Africano:
an_call.c:
a1.o 、 a2.o:
liba.a:
liban.so:
liban_call.so:
liban_opt.so: