¿Cuál es la diferencia entre los archivos .ay .so?

Hasta donde tengo entendido, son bibliotecas, pero ¿cuál es la diferencia entre las dos?

Comentarios

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ía full 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *