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