Distribuindo binário com dependências no Linux


2

Estou desenvolvendo um aplicativo multi-plataforma e estou tendo problemas com a distribuição de um binário do Linux. No Windows, as dll foram -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 cedo, então eu 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?

PS Também tenho Linux 64-bit, 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).


1
Isso deve ir para o SO.
Shiki

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 onde você oferece o produto para download. No seu caso, algo como

Você precisará ter o seguinte instalado:

(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 Linux checaria seu gerenciador de pacotes para ter certeza de que eles tinham 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.


2

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


1

O equivalente no Linux é incluir os arquivos .so em um diretório dentro do pacote e ter um shell script definido $LD_LIBRARY_PATHpara apontar para esse diretório e, em seguida, 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 fileos vários binários para confirmar isso.


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 libs podem ser de versões diferentes com símbolos diferentes ou de arquitetura diferente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.