O que são arquivos .eae .so?


427

Atualmente, estou tentando portar um aplicativo C para o AIX e estou ficando confuso. O que são arquivos .eae .so e como eles são usados ​​na criação / execução de um aplicativo?


116
um é biblioteca archive e outro é shared object
Shiplu Mokaddim

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.


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).


Oi, existe alguma opção para descompilar o arquivo .so no código c / c ++.?
Jishant


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.


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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.