Respuestas:
Un .a
archivo es una biblioteca estática, mientras que un .so
archivo 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 .
.a
solo se puede incluir como parte de un programa durante la compilación. .so
's se puede "importar" mientras se carga un programa.
ar
utilidad. Más información aquí
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).
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
.
ldd
en .so's, y le mostrará qué otras bibliotecas utiliza. Static regresará con un mensaje que dice que no es una biblioteca dinámica.