Como copiar bibliotecas em que um programa vinculado dinamicamente é construído?

0

Recentemente, estive compilando software e distribuindo-o. A última vez que fiz isso, fiz isso construindo meu programa e executando o ldd nele para obter todas as bibliotecas às quais estava vinculado. Eu peguei o caminho da biblioteca (como digamos /lib/x86_64-linux-gnu/libc.so.6 ) e copiei e colei do meu sistema. Funcionou muito bem, mas copiar e colar manualmente cada biblioteca parecia repetitivo. Existe uma maneira que eu possa obter apenas uma lista dos caminhos para as bibliotecas sozinho (sem todo o libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1dc3333000) ) para que eu possa copiá-los e distribuí-los com a minha compilação?

    
por John Scott 19.09.2015 / 23:45

2 respostas

3

Nesse ponto, você está basicamente criando um tarball de uma distribuição Linux inteira. Dependendo das bibliotecas às quais você se conecta, simplesmente incluir a própria biblioteca dinâmica pode não ser suficiente (algumas bibliotecas dependem de módulos de plug-in e outros arquivos externos, que não estão instalados nos mesmos locais, nas mesmas versões, em todas as distribuições). do Linux).

Existem algumas opções para lidar com essas diferenças:

  • Distribua o código-fonte do seu programa e deixe as pessoas a quem você está distribuindo, para que os usuários possam compilá-lo por conta própria, em sua distribuição de escolha.
  • Re-compile uma versão do seu programa para cada versão diferente de cada distribuição diferente do Linux que você deseja suportar e distribua seu programa em pacotes para essas distribuições e versões.
  • Compile seu aplicativo usando vinculação estática, em vez de vinculação dinâmica. Se você vincular a bibliotecas que dependem de módulos ou arquivos externos, isso ainda pode ser problemático.
  • Distribua uma imagem de VM de uma distribuição Linux específica que você deseja suportar, que é uma instalação mínima, e tem seu programa instalado por padrão, para fornecer um ambiente completo para executá-la.
por dobey 20.09.2015 / 01:43
0

Eu descobri isso (principalmente).

Vamos supor que o programa que construí e que planejo distribuir esteja localizado em / bin / bash. Eu poderia criar um novo diretório e executar o seguinte comando: cp $(ldd /bin/bash) ./

Isso gerará algumas mensagens de erro, mas elas podem ser ignoradas.

    
por John Scott 20.09.2015 / 01:50