Convertire una libreria statica in una libreria condivisa?

Ho una libreria di terze parti che consiste principalmente di un gran numero di file di libreria statici ( .a ). Posso compilarlo in un singolo file di libreria .a , ma ho davvero bisogno che sia un singolo file di libreria condivisa .so .

C’è un modo per convertire un file .a statico in un file .so condiviso? O più in generale c’è un buon modo per combinare un numero enorme di file .a statici con pochi file .o in un unico file .so ?

    Questo (con l’appropriato -L’s ovviamente)

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

    Non farlo?

    Non è ansible farlo se gli oggetti all’interno della libreria statica sono stati compilati senza -fPIC o simili.

     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 

    Non sono sicuro di gcc, ma per g ++ ho dovuto aggiungere l’opzione linker -whole-archive per includere gli oggetti dalle librerie statiche nell’object condiviso. L’opzione –no-whole-archive è necessaria se vuoi collegarti a libc_static_lib.a e libother_shared_object.so, ma non includerli nel loro insieme in megalib.so.

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

    ar -x può essere utile anche se vuoi concentrarti su oggetti specifici dal tuo .a s e non vuoi aggiungere nulla da solo.