Executável compilado

3

Se, por exemplo, eu tiver compilado um programa C simples que usa o GTK 3 em uma máquina rodando Ubuntu, poderei executá-lo em outros sabores do Linux?

Nota: As minhas perguntas reais são "Devo rotular o meu programa compilado para Linux ou apenas Ubuntu?"

por exemplo. Devo marcar minha página de downloads como

Windows
    program.exe

Linux
    program

Macintosh
    program.app

ou

Windows
    program.exe

Ubuntu < Version 17.04
    program

Macintosh
    program.app
    
por J C 24.04.2017 / 01:02

1 resposta

3

Os executáveis Linux não são específicos de uma distribuição Linux. Mas eles são específicos para uma arquitetura de processador e para um conjunto de versões de bibliotecas.

Um executável para qualquer sistema operacional é específico para uma arquitetura de processador. Usuários de Windows e Mac não se importam tanto porque esses sistemas operacionais são mais ou menos executados em uma única arquitetura. (OSX costumava rodar em arquiteturas de múltiplos processadores, e os aplicativos OSX eram tipicamente distribuídos como um pacote que continha código para todas as arquiteturas de processador suportadas, mas o OSX moderno só roda em processadores amd64. O Windows roda em processadores Intel de 32 e 64 bits , portanto, você pode encontrar executáveis do Windows “32 bits” e “64 bits”.

O Windows resolve o problema de dependência de bibliotecas forçando os programadores a agrupar todas as bibliotecas que usam com seus programas. No Linux, é incomum fazer isso, com o benefício de que os programadores não precisam empacotar bibliotecas e que os usuários obtêm atualizações de segurança e correções de bugs para bibliotecas, mas com o custo que os programas precisam ser compilados de forma diferente para diferentes distribuições de distribuições .

Portanto, você deve rotular seu binário como “Linux, PC de 64 bits (amd64), compilado para o Ubuntu 17.04” (ou “PC de 32 bits (i386)” se este for um executável de 32 bits) e detalhe das bibliotecas necessárias. Você pode ver as bibliotecas usadas por um executável com o comando ldd : run ldd program . A parte antes do => é o que interessa, por ex. libgtk-3.so.0 é a principal biblioteca GTK3, com a versão 0 (se alguma vez houve uma versão 1, seria incompatível com a versão 0, essa é a razão para alterar o número da versão). Algumas dessas bibliotecas são coisas que todos teriam de qualquer maneira porque não mudaram em muitos anos; apenas a experiência ou uma comparação, olhando para várias distribuições e vários lançamentos, pode dizer isso. Usuários de outras distribuições podem executar o mesmo binário se tiverem versões compatíveis das bibliotecas.

    
por 24.04.2017 / 01:14