Os aplicativos geralmente usam bibliotecas vinculadas dinâmicas?

1

Se eu quiser compilar um aplicativo que precisa de pacotes que não são fornecidos pelo gerenciador de pacotes da distribuição e eu quero gerar um pacote de distribuição dele, os usuários que usam esse pacote de distribuição precisam de todas essas bibliotecas extras instaladas ou essas bibliotecas serão compactadas? no binário? Eu sei que isso pode depender de aplicativo para aplicativo, mas como posso reconhecer se um pacote precisa de bibliotecas vinculadas dinâmicas?

    
por Bevor 02.12.2013 / 09:16

2 respostas

6

O comando ldd dirá se um binário seu está usando bibliotecas compartilhadas. Para aqueles que não pertencem a um pacote de distribuição, cabe a você apontar os usuários do seu pacote para o local onde baixá-los ou agrupar as bibliotecas em seu pacote, o que certamente é a maneira mais simples para os usuários, assumindo que a licença da biblioteca permite que você faça isso.

Se você agrupá-los, certifique-se de que os binários que você construir encontrarão essas bibliotecas usando LD_RUN_PATH no momento da compilação, o que é uma prática melhor do que confiar em LD_LIBRARY_PATH para corrigir executáveis quebrados.

Consulte o link para obter detalhes.

    
por 02.12.2013 / 09:44
3

A maioria dos aplicativos em uma distribuição regular usa bibliotecas e não são compiladas estaticamente porque a sobrecarga de RAM e disco seria muito mais importante.

Quando você inclui bibliotecas dentro de um executale, ele fica muito mais pesado, então o carregamento desse executável é muito mais lento e mais caro.

Se você deseja implantar um aplicativo que não usa a biblioteca de sistema padrão e não deseja instalá-lo em seu sistema, pode considerar a compilação estática para que seu programa não dependa de nenhuma biblioteca do sistema. O comando ldd youprogram dirá se seu programa é estático ou não.

Se você quiser colocar seu aplicativo em uma subpasta usando a biblioteca dentro desse diretório em vez da do sistema, você terá que definir LD_RUN_PATH ao almoçar seu aplicativo para incluir a biblioteca que você carrega com ele e não o biblioteca do sistema.

    
por 02.12.2013 / 10:46