Um .aarquivo é uma biblioteca estática, enquanto um .soarquivo é uma biblioteca de objetos compartilhados (dinâmica) semelhante a uma DLL no Windows. Há algumas informações detalhadas sobre as diferenças entre os dois nesta página .
.asó pode ser incluído como parte de um programa durante a compilação. .sopodem ser "importados" enquanto um programa é carregado.
LawrenceC
2
o que .a representa?
Hfrmobile 29/11
2
@hfrmobile A significa arquivamento - uma biblioteca estática é uma coleção de arquivos de objetos criados usando o arutilitário. Mais informações aqui
ajk
28
A seguir, um arquivo .a é um arquivo "ar". Não muito diferente de um arquivo tar, ele armazena arquivos .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 quiser.
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 possui 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ê possua no diretório / lib.) Observe que um arquivo .so também pode conter apenas um script vinculador direcionando-o para encontrar o arquivo em outro local ou use 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.)
Erro de digitação. você quer escrever ar -t /usr/lib/libc.a. Na verdade, -isso não parece ser necessário neste caso. Também /lib/libc.so.6.apenas imprime alguma saída. Eu não sei se eu chamaria isso de full fledged program.
Faheem Mitha
11
É um programa completo no sentido de que possui um símbolo principal para o executivo encontrar.
Hack Saw
2
Você também pode executar lddem .so's e ele mostrará quais outras bibliotecas ele usa. O Static retornará com uma mensagem dizendo que não é uma biblioteca dinâmica.
Respostas:
Um
.a
arquivo é uma biblioteca estática, enquanto um.so
arquivo é uma biblioteca de objetos compartilhados (dinâmica) semelhante a uma DLL no Windows. Há algumas informações detalhadas sobre as diferenças entre os dois nesta página .fonte
.a
só pode ser incluído como parte de um programa durante a compilação..so
podem ser "importados" enquanto um programa é carregado.ar
utilitário. Mais informações aquiA seguir, um arquivo .a é um arquivo "ar". Não muito diferente de um arquivo tar, ele armazena arquivos .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 quiser.
Você pode obter uma lista dos membros de um arquivo ar com o parâmetro -t, por exemplo:
Um arquivo .so é um arquivo de "objeto compartilhado" e possui 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:
(ou qualquer versão do libc.so que você possua no diretório / lib.) Observe que um arquivo .so também pode conter apenas um script vinculador direcionando-o para encontrar o arquivo em outro local ou use 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.)
fonte
ar -t /usr/lib/libc.a
. Na verdade,-
isso não parece ser necessário neste caso. Também/lib/libc.so.6.
apenas imprime alguma saída. Eu não sei se eu chamaria isso defull fledged program
.ldd
em .so's e ele mostrará quais outras bibliotecas ele usa. O Static retornará com uma mensagem dizendo que não é uma biblioteca dinâmica.