Pregunta

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

¿Hay alguna forma de convertir un archivo estático .a en un archivo compartido .so ? O, en general, ¿hay una buena manera de combinar una gran cantidad de archivos estáticos .a con unos pocos archivos de objetos .o en un solo .so archivo?

¿Fue útil?

Solución

¿Esto (con los -L apropiados, por supuesto)

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

¿No lo haces?

Otros consejos

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

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 acerca 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.

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

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

Ejemplos:

ar -x lib***.a
gcc -shared *.o -o lib***.so
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top