¿Cuál es la diferencia entre .a y .so file?


Respuestas:


54

Un .aarchivo es una biblioteca estática, mientras que un .soarchivo es una biblioteca de objetos compartidos (dinámica) similar a una DLL en Windows. Hay información detallada sobre las diferencias entre los dos en esta página .


18
.asolo se puede incluir como parte de un programa durante la compilación. .so's se puede "importar" mientras se carga un programa.
LawrenceC

2
¿Qué significa .a?
hfrmobile

2
@hfrmobile El a significa archivo : una biblioteca estática es una colección de archivos de objetos creados con la arutilidad. Más información aquí
ajk

28

Como continuación, un archivo .a es un archivo "ar". No muy diferente de un archivo tar, almacena archivos .o o de objetos, lo que permite sacarlos del archivo y vincularlos a un programa, entre otras cosas. Puede usar ar para almacenar otros archivos si lo desea.

Puede obtener una lista de los miembros de un archivo ar con el parámetro -t, por ejemplo:

ar -t /usr/lib/libc.a

Un archivo .so es un archivo de "objeto compartido", y tiene mucha más información disponible para que el enlazador pueda vincular a los miembros a un programa de carga lo más rápido posible.

Por ejemplo, intente:

objdump -T /lib/libc-2.11.1.so

(o cualquier versión de libc.so que tenga en su directorio / lib.) Tenga en cuenta que un archivo .so también podría contener un script de enlace que lo dirija a buscar el archivo en otro lugar, o usar otra cosa.

Curiosamente, un archivo .so también puede ser un programa completo. Por ejemplo, intente ejecutar /lib/libc.so.6 . (Lamentablemente, esta última parte no parece funcionar en sistemas más modernos. No es que sea una gran pérdida).


Error de tipografía. te refieres a escribir ar -t /usr/lib/libc.a. En realidad -, no parece ser necesario en este caso. También /lib/libc.so.6.solo imprime algo de salida. No sé si lo llamaría a full fledged program.
Faheem Mitha

1
Es un programa completo en el sentido de que tiene un símbolo principal para que el ejecutivo lo encuentre.
Hack Saw

2
También puede ejecutar ldden .so's, y le mostrará qué otras bibliotecas utiliza. Static regresará con un mensaje que dice que no es una biblioteca dinámica.
Marcin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.