studio programacion móviles libro desarrollo curso aplicaciones c linux shared-libraries static-libraries

programacion - ¿Convertir una biblioteca estática en una biblioteca compartida?



manual de programacion android pdf (5)

Tengo una biblioteca de terceros que consta principalmente de una gran cantidad de archivos de biblioteca estática ( .a ). Puedo compilar esto en un solo archivo de biblioteca .a , pero realmente necesito que sea un solo archivo de biblioteca compartida .so .

¿Hay alguna forma de convertir un archivo .a estático en un archivo .so compartido? O más generalmente, ¿existe una buena manera de combinar una gran cantidad de archivos .a estáticos con algunos archivos de objeto .o en un solo archivo .so ?


Hace esto (con las -L apropiadas por supuesto)

gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib

No lo hagas?


No puede hacer esto si los objetos dentro de la biblioteca estática se compilaron sin -fPIC o similar.


ar -x también puede ser útil si desea centrarse en objetos específicos de su .a sy no desea agregar nada por su cuenta.


ar -x lib***.a gcc -shared *.o -o lib***.so


g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object

No estoy seguro de gcc, pero para g ++ tuve que agregar la opción --whole-archive linker para incluir los objetos de las bibliotecas estáticas en el objeto compartido. La opción --no-whole-archive es necesaria si desea vincular a libc_static_lib.a y libother_shared_object.so, pero no incluirlos como un todo en megalib.so.