Pergunta

Eu tenho uma biblioteca de terceiros que consiste principalmente de um grande número de estáticos (.a) arquivos de biblioteca. I pode compilar isso em um único arquivo de biblioteca .a, mas eu realmente preciso que ele seja um único .so compartilhada arquivo de biblioteca.

Existe alguma maneira de converter um arquivo .a estática em um arquivo .so compartilhado? Ou, mais geralmente há uma boa maneira de combinar um grande número de arquivos .a estáticos com alguns arquivos .o objeto em um único arquivo .so?

Foi útil?

Solução

Será que isso (com -L apropriado é claro)

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

Não fazê-lo?

Outras dicas

Você não pode fazer isso se objetos dentro de biblioteca estática foi compilado sem -fPIC ou afins.

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

Eu não tenho certeza sobre o gcc, mas para g ++ eu tive que adicionar a opção vinculador Whole-archive para incluir os objetos das bibliotecas estáticas no objeto compartilhado. A opção --no-whole-arquivo é necessário se você quiser link para libc_static_lib.a e libother_shared_object.so, mas não incluí-los como um todo em megalib.so.

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

ar -x também pode ser útil se você quer se concentrar em objetos específicos de seus .as e você não quer acrescentar alguma coisa em seu próprio país.

Exemplos:

ar -x lib***.a
gcc -shared *.o -o lib***.so
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top