Distribuindo o binário com dependências no Linux

2

Estou desenvolvendo um aplicativo de plataforma cruzada e estou tendo problemas com a distribuição de um binário do Linux. No Windows, as dll's eram - libsndfile-1.dll lua5.1.dll lua51.dll openal32.dll sfml-audio.dll sfml-graphics.dll sfml-network.dll sfml-system.dll sfml-window.dll

Este é um pré-lançamento muito antigo, por isso não quero escrever um pacote. Estou interessado apenas em fazer com que o usuário faça o download de um tarball e execute o binário dentro dele. Quais são as maneiras típicas para os usuários obterem essas dependências no Linux, sem escrever um pacote?

P.S. Também tenho Linux 64 bits e um usuário relatou que o aplicativo não foi executado em seu Linux de 32 bits. Qual poderia ser o problema? Eu não tive esse problema com o Windows (construído em um sistema de 64 bits, funciona em 32 bits).

    
por person 17.07.2010 / 17:34

4 respostas

2

Não tenho certeza se isso é exatamente o que você está procurando, mas normalmente o que é feito para os programas Linux é que você lista as dependências na página da Web em que oferece o produto para download. No seu caso, algo como

You will need to have the following installed:

  • libsndfile
  • openal
  • Lua
  • SFML

(Obviamente, especifique os números de versão também, se o seu programa só funciona com certas versões). Então, um usuário do Linux checaria seu gerenciador de pacotes para ter certeza de que eles têm todos aqueles antes de tentar instalar o seu programa.

Alguns programas são distribuídos da maneira que Ignacio explicou, ou seja, incluem todas as dependências que você precisa dentro do arquivo que você distribui. Isso tende a incomodar algumas pessoas, porque elas estão presas a cópias extras das bibliotecas que não podem ser atualizadas e podem até entrar em conflito com as versões do sistema.

    
por 17.07.2010 / 19:12
2

Você pode vincular estaticamente o programa a todas as bibliotecas, exceto libc e libm. (Heck, você pode até ligar neles).

    
por 17.07.2010 / 19:37
1

O equivalente no Linux é incluir os arquivos .so em um diretório dentro do pacote e ter um conjunto de scripts de shell $LD_LIBRARY_PATH para apontar para esse diretório e depois executar o executável binário.

O problema com 32 x 64 é que o compilador gera código de 64 bits e vincula-se a bibliotecas de 64 bits. Você precisará instalar um conjunto de ferramentas de 32 bits para criar um binário de 32 bits. Você pode executar file nos vários binários para confirmar isso.

    
por 17.07.2010 / 17:52
1

Você pode obter as dependências de um binário usando o comando ldd

Por exemplo:

ldd program_binary

        libctest.so.1 => /opt/lib/libctest.so.1 (0x00002aaaaaaac000)
        libc.so.6 => /lib64/tls/libc.so.6 (0x0000003aa4e00000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003aa4c00000)

Mas é melhor compartilhar como fonte, pois as bibliotecas podem ter versões diferentes, com símbolos diferentes ou de arquitetura diferente.

    
por 17.07.2010 / 18:47

Tags