Qual é a diferença entre o arquivo .a e .so?

Pelo que entendi, são bibliotecas, mas qual é a diferença entre as duas?

Comentários

Resposta

A .a arquivo é uma biblioteca estática, enquanto um arquivo .so é uma biblioteca de objeto compartilhado (dinâmica) semelhante a uma DLL no Windows. Existem algumas informações detalhadas sobre as diferenças entre os dois nesta página .

Comentários

  • .a só podem ser incluídos como parte de um programa durante a compilação. .so ' s podem ser " importados " enquanto um programa carrega.
  • o que significa .a significa?
  • @hfrmobile O a significa arquivo – uma biblioteca estática é uma coleção de arquivos de objetos criados usando o utilitário ar. Mais informações aqui

Resposta

A seguir, um arquivo .a é um arquivo “ar”. Semelhante a um arquivo tar, ele armazena .o ou objeto , permitindo que eles sejam retirados do arquivo e vinculados a um programa, entre outras coisas. Você pode usar ar para armazenar outros arquivos, se desejar.

Você pode obter uma lista dos membros de um arquivo ar com o parâmetro -t, por exemplo:

ar -t /usr/lib/libc.a 

Um arquivo .so é um arquivo de “objeto compartilhado” e tem muito mais informações disponíveis para o vinculador para que os membros possam ser vinculados a um programa de carregamento o mais rápido possível.

Por exemplo, tente:

objdump -T /lib/libc-2.11.1.so 

(ou qualquer versão de libc.so que você tenha em seu diretório / lib.) Observe que um arquivo .so também pode conter apenas um script vinculador direcionando-o para encontrar o arquivo em outro lugar, ou usar outra coisa.

Curiosamente, um arquivo .so também pode ser um programa completo. Por exemplo, tentando executar /lib/libc.so.6 . (Infelizmente, esta última parte não parece funcionar em sistemas mais modernos. Não que seja uma grande perda.)

Comentários

  • Erro de digitação . você pretende escrever ar -t /usr/lib/libc.a. Na verdade, - não ' não parece ser necessário neste caso. Além disso, /lib/libc.so.6. apenas imprime alguma saída. Eu não ' não sei se eu o chamaria de full fledged program.
  • É ' um programa completo no sentido de que tem um símbolo principal para o exec encontrar.
  • Você também pode executar ldd em .so ' s, e mostrará quais outras bibliotecas ele usa. Static retornará com uma mensagem dizendo que ' não é uma biblioteca dinâmica.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *