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

49

Tanto quanto eu entendo, elas são bibliotecas, mas qual é a diferença entre as duas?

    
por Erik B 15.05.2011 / 00:35

2 respostas

40

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

    
por 15.05.2011 / 00:47
23

Como segue, um arquivo .a é um arquivo "ar". Não diferente de um arquivo tar, ele armazena arquivos .o ou object, permitindo que eles sejam retirados do arquivo e vinculados a um programa, entre outras coisas. Você poderia usar ar para armazenar outros arquivos, se quisesse.

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

ar -t /usr/lib/libc.a

Um arquivo .so é um arquivo "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 do libc.so que você tenha em seu diretório / lib.) Observe que um arquivo .so também pode conter apenas um script de link direcionando-o para localizar 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.)

    
por 15.05.2011 / 09:40

Tags