Hasta donde tengo entendido, son bibliotecas, pero ¿cuál es la diferencia entre las dos?
Comentarios
- Publicación relacionada – ¿Cuál ' es la diferencia entre .so, .la y .a biblioteca archivos?
Respuesta
A .a
El archivo es una biblioteca estática, mientras que un archivo .so
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 .
Comentarios
-
.a
solo se pueden incluir como parte de un programa durante la compilación..so
' s pueden " importados " mientras se carga un programa. - ¿Qué significa .a?
- @hfrmobile La a significa archivo – una biblioteca estática es una colección de archivos de objetos creados con la utilidad
ar
. Más información aquí
Respuesta
A continuación, un archivo .a es un archivo «ar». No a diferencia de un archivo tar, almacena .o u objeto archivos, lo que permite extraerlos 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 el vinculador para que los miembros puedan vincularse 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 vinculación que lo dirija a encontrar el archivo en otro lugar, o use 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.)
Comentarios
- Typo . quiere escribir
ar -t /usr/lib/libc.a
. En realidad, el-
no ' parece ser necesario en este caso. También/lib/libc.so.6.
solo imprime algunos resultados. No ' no sé si lo llamaríafull fledged program
. - Es ' es un programa completo en el sentido de que tiene un símbolo principal para que el ejecutivo lo encuentre.
- También puede ejecutar
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.