O que são arquivos .eae .so?

Respostas:

483

As bibliotecas de arquivamento (.a) são vinculadas estaticamente, ou seja, quando você compila seu programa com a opção -c no gcc. Portanto, se houver alguma alteração na biblioteca, você precisará compilar e construir seu código novamente.

A vantagem do .so (objeto compartilhado) sobre a biblioteca .a é que eles estão vinculados durante o tempo de execução, ou seja, após a criação da opção .o do arquivo .o no gcc. Portanto, se houver alguma alteração no arquivo .so, você não precisará recompilar seu programa principal. Mas verifique se o seu programa principal está vinculado ao novo arquivo .so com o comando ln.

Isso ajudará você a criar os arquivos .so. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Espero que isto ajude.

Frondoso
fonte
2
alguma delas se refere a pic(código independente de posição)?
transang
213

.a são bibliotecas estáticas. Se você usa o código armazenado dentro deles, é retirado deles e incorporado ao seu próprio binário. No Visual Studio, esses seriam arquivos .lib.

.so são bibliotecas dinâmicas. Se você usar o código armazenado dentro deles, ele não será utilizado e incorporado ao seu próprio binário. Em vez disso, é apenas referenciado, portanto o binário dependerá deles e o código do arquivo so será adicionado / carregado no tempo de execução. No Visual Studio / Windows, esses arquivos seriam .dll (com pequenos arquivos .lib contendo informações de vinculação).

Mario
fonte
Oi, existe alguma opção para descompilar o arquivo .so no código c / c ++.?
Jishant
@Ancee: olhar para esta questão: stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz
Um .libarquivo pequeno para .dllé chamado de biblioteca de importação.
Programador Orientado a Dinheiro
13

Os arquivos .a geralmente são bibliotecas vinculadas estaticamente (ou arquivam com mais precisão) e
.so são bibliotecas vinculadas dinamicamente.

Para criar uma porta, você precisará do código-fonte que foi compilado para produzi-las ou de arquivos equivalentes em sua máquina AIX.

gbulmer
fonte
Como crio meu aplicativo para usar arquivos .so?
Dunc
Existem muitas referências excelentes para criar os dois tipos de bibliotecas e vincular a elas na web. Google é seu amigo.
David Pointer
@ Dunc - Existem algumas maneiras. Você tem um makefile? Normalmente, o comando que monta o programa inteiro (e, portanto, chama o vinculador) especificará os locais para procurar arquivos de biblioteca com -L / dir / dir1 /.../ e também poderá nomear explicitamente as bibliotecas com -lname. Você descobrirá que o nome real é libname.a ou libname.so. O vinculador pode descobrir o que fazer se este for um programa razoavelmente normal. Mas você ainda tem o problema de criar ou localizar o arquivo .so. Você tem código-fonte para construí-lo ou uma biblioteca do AIX?
gbulmer
10

Eles são usados ​​no estágio de vinculação. .aos arquivos são vinculados estaticamente e os .soarquivos são meio que vinculados, de modo que a biblioteca é necessária sempre que você executa o exe.

Você pode encontrar onde eles estão armazenados olhando para qualquer um dos diretórios lib ... /usr/libe /libpossui a maioria deles, e também há a LIBRARY_PATHvariável de ambiente.

Matt
fonte
0

A Wikipedia é uma fonte decente para essa informação.

Para aprender sobre arquivos de biblioteca estática como .a, leia Bibliografia estática

Para aprender sobre os arquivos da biblioteca compartilhada, como. Então leia Library_ (computing) #Shared_libraries Nesta página, também há informações úteis na seção Nomenclatura de arquivos .

user3731622
fonte