Liberando software linux - compatibilidade

2

Eu quero lançar uma biblioteca C ++ para Linux. É verdade que (quando nenhuma outra biblioteca é ligada dinamicamente), apenas a versão glibc decide a compatibilidade com outras distribuições Linux?

Existe uma maneira melhor de suportar a maioria das distribuições Linux dos últimos 5 anos do que instalar várias máquinas virtuais e compilá-las lá? Por exemplo, um binário Linux compilado em um sistema Linux muito antigo será executado em novas versões do Linux?

    
por Geom 25.05.2015 / 11:18

2 respostas

1

As APIs do kernel do Linux são muito estáveis. (Estou falando sobre as chamadas do sistema, não as APIs dentro do kernel.) Um executável vinculado estaticamente produzido desde 1997 ou por aí (a mudança para ELF como o formato executável) deve funcionar em qualquer sistema Linux atual. No entanto, os executáveis estaticamente vinculados têm muitas desvantagens: são volumosos, não podem ser atualizados facilmente quando há bugs em códigos de terceiros e tendem a viver em suas próprias bolhas, pois têm problemas para interagir com alguns recursos do sistema. para o qual a biblioteca padrão fornece suporte configurável (por exemplo, DNS, localidades, contas de usuário, etc.).

Para bibliotecas, uma convenção comum é que a alteração no primeiro número da versão indica uma alteração de ABI incompatível, e o restante da versão aumenta em alterações compatíveis com versões anteriores. Por exemplo, se o seu programa estiver vinculado à versão 2.3, ele funcionará com a versão 2.3 ou 2.4 da biblioteca, mas não com o 2.2 ou 3. Algumas bibliotecas usam diferentes convenções. O vinculador dinâmico usa o soname gravado na biblioteca para decidir se sua versão é adequada.

A biblioteca padrão no Linux não incorporado é Glibc . A versão principal do Glibc é 6 no Linux (por isso é conhecido como libc6) desde 1998; a versão principal do upstream é 2, o que explica porque a versão do libc6 é 2. MINOR e não 6. MINOR . Em princípio, os programas vinculados à versão mais antiga da libc6 devem funcionar com versões mais recentes, embora isso nem sempre seja verdade no início. Qualquer programa vinculado ao Glibc 2.3 ou superior deve funcionar nas versões atuais.

A biblioteca C ++ padrão é usada para mudar mais rapidamente, mas a versão principal atual (6) é atual desde 2005.

Se você compilar um programa em um sistema mais antigo, ele deverá funcionar em sistemas mais novos, desde que as versões necessárias da biblioteca estejam disponíveis. Pegue a versão mais antiga do CentOS (atualmente 5) e o

    
por 26.05.2015 / 03:14
0

Sim, principalmente, embora você precise evitar novos recursos do kernel.

Se você deseja criar um programa C ++ portátil, é aconselhável aderir ao padrão oficial ISO C ++. À medida que o padrão é modificado, você pode precisar adaptar o seu programa, mas isso geralmente não é muito trabalho.

Você pode pedir ao g ++ para manter um padrão mais antigo para evitar que seu programa não seja compilado em uma máquina com uma biblioteca mais antiga. Define para o compilador parecido com

-D__STRICT_ANSI__ -D_ISOC99_SOURCE=1 -D_ISOC9X_SOURCE=1

(para C).

Naturalmente, há também o problema de hardware (CPU alvo incluindo arquitetura como IA64 e recursos de CPU como SSE).

    
por 25.05.2015 / 11:34

Tags