4.2. O mecanismo soname


Bibliotecas carregadas dinamicamente (objetos compartilhados) usam um mecanismo chamado soname para gerenciar múltiplas versões compatíveis de uma biblioteca.

Pré-requisitos

Introdução do problema

Uma biblioteca carregada dinamicamente (objeto compartilhado) existe como um arquivo executável independente. Isto torna possível atualizar a biblioteca sem atualizar as aplicações que dependem dela. Entretanto, surgem os seguintes problemas com este conceito:

  • Identificação da versão atual da biblioteca
  • Necessidade de múltiplas versões da mesma biblioteca presentes
  • Sinalizando a compatibilidade ABI de cada uma das múltiplas versões

O mecanismo soname

Para resolver isto, o Linux usa um mecanismo chamado soname.

Uma versão da biblioteca foo X.Y é compatível com outras versões da ABI com o mesmo valor de X em um número de versão. Pequenas mudanças preservando a compatibilidade aumentam o número Y. Grandes mudanças que quebram a compatibilidade aumentam o número X.

A versão atual da biblioteca foo X.Y existe como um arquivo libfoo.so.x.y. Dentro do arquivo da biblioteca, um soname é gravado com o valor libfoo.so.x para sinalizar a compatibilidade.

Quando as aplicações são construídas, o linker procura a biblioteca, procurando o arquivo libfoo.so. Um link simbólico com este nome deve existir, apontando para o arquivo real da biblioteca. O linker então lê o soname do arquivo da biblioteca e o grava no arquivo executável da aplicação. Finalmente, o linker cria o aplicativo que declara a dependência da biblioteca usando o soname, não um nome ou um nome de arquivo.

Quando o linker dinâmico de tempo de execução liga um aplicativo antes de ser executado, ele lê o soname do arquivo executável do aplicativo. Este soname é libfoo.so.x. Um vínculo simbólico com este nome deve existir, apontando para o arquivo real da biblioteca. Isto permite carregar a biblioteca, independentemente do componente Y de uma versão, porque o soname não muda.

Nota

O componente Y do número de versão não está limitado a um único número. Além disso, algumas bibliotecas codificam sua versão em seu nome.

Leitura do soname de um arquivo

Para exibir o soname de um arquivo da biblioteca somelibrary:

$ objdump -p somelibrary | grep SONAME

Substitua somelibrary pelo nome real do arquivo da biblioteca que você deseja examinar.

Red Hat logoGithubRedditYoutubeTwitter

Aprender

Experimente, compre e venda

Comunidades

Sobre a documentação da Red Hat

Ajudamos os usuários da Red Hat a inovar e atingir seus objetivos com nossos produtos e serviços com conteúdo em que podem confiar.

Tornando o open source mais inclusivo

A Red Hat está comprometida em substituir a linguagem problemática em nosso código, documentação e propriedades da web. Para mais detalhes veja oBlog da Red Hat.

Sobre a Red Hat

Fornecemos soluções robustas que facilitam o trabalho das empresas em plataformas e ambientes, desde o data center principal até a borda da rede.

© 2024 Red Hat, Inc.