Quão portáveis são os binários compilados no Ubuntu?

5

O título diz tudo, na verdade. Mas permita-me especificar a questão:

Supondo que eu compilei uma aplicação que usa libffi, libGL, dlfcn e SDL, seria dito que o binário é executado em outras distribuições do Linux com a mesma arquitetura, etc?

A razão pela qual eu pergunto é por causa do diretório /usr/lib/i386-linux-gnu - eu posso estar errado, mas eu suponho que este diretório é algo bastante específico do Ubuntu, não?

Então, quão portáveis são os binários compilados no Ubuntu?

    
por hiobs 15.10.2011 / 23:38

2 respostas

11

Quando você compila um binário, digamos, nginx do código-fonte, ele é construído com informações sobre quais versões das bibliotecas estão no sistema que está compilando os binários. As bibliotecas para referência, é claro, são determinadas pelos argumentos (para nginx , essa é a definição de quais módulos você quer ativar ou não). Mas esse binário que você construiu será (improvável) executado em um sistema separado, a menos que seja um sistema configurado de forma idêntica.

Você vai querer compilar o aplicativo em cada sistema individual, é (relativamente) improvável que você seja capaz de portar a versão compilada para outro sistema que possa não ter uma versão compatível de cada biblioteca.

Nota: Enquanto você pode obter um binário para portar para outro sistema Linux, é mal aconselhado e geralmente é demorado. Isso é porque:
(1) Você precisa ter certeza de que o sistema para o qual você está movendo seu binário está usando a mesma versão de libc que foi usada para compilar os binários. (2) Você precisa ter certeza de que as bibliotecas usadas dentro do programa podem ser facilmente detectadas em seu sistema, e que elas são as mesmas (ou compatíveis) versões que foram usadas para criar o programa.

... e, claro, outras variáveis a considerar. É mais fácil, a longo prazo, compilar o programa em cada sistema para usá-lo, em vez de tentar se esforçar para a portabilidade.

    
por Thomas Ward 29.03.2012 / 06:08
3

Geralmente, sim, mas depende. Às vezes, as bibliotecas adicionam novas funções. Se você começar a usar essas novas funções, então você agora depende dessa versão da biblioteca (já que as versões mais antigas não a têm). Enquanto o sistema tiver as bibliotecas necessárias, com pelo menos as versões mínimas necessárias (e a mesma arquitetura), o programa funcionará bem.

Se você estiver empacotando o programa, o sistema de pacotes debian tem recursos para detectar quais funções você chama nas bibliotecas e descobrir a versão mínima que você precisa, para que o pacote possa especificar essas informações assim que as pessoas o instalarem em um debian sistema baseado, pode ter certeza que eles têm as bibliotecas necessárias. Ao seguir este procedimento, geralmente é possível construir um .deb no Ubuntu que será instalado e executado em, digamos, debian e mint, e qualquer release que atenda aos seus requisitos mínimos de biblioteca.

Veja o link

    
por psusi 29.03.2012 / 17:10

Tags