.so
Los archivos son bibliotecas dinámicas . El sufijo significa "objeto compartido", porque todas las aplicaciones que están vinculadas con la biblioteca usan el mismo archivo, en lugar de hacer una copia en el ejecutable resultante.
.a
Los archivos son bibliotecas estáticas . El sufijo significa "archivo", porque en realidad son solo un archivo (hecho con el ar
comando, un predecesor tar
que ahora solo se usa para hacer bibliotecas) de los archivos de objetos .o originales.
.la
Los archivos son archivos de texto utilizados por el paquete "libtools" de GNU para describir los archivos que componen la biblioteca correspondiente. Puede encontrar más información sobre ellos en esta pregunta: ¿Para qué son los archivos .la de libtool?
Las bibliotecas estáticas y dinámicas tienen ventajas y desventajas.
Pro estático: el usuario siempre usa la versión de la biblioteca que ha probado con su aplicación, por lo que no debería haber problemas de compatibilidad sorprendentes.
Con estática: si se soluciona un problema en una biblioteca, debe redistribuir su aplicación para aprovecharla. Sin embargo, a menos que sea una biblioteca que los usuarios puedan actualizar por su cuenta, es posible que tenga que hacer esto de todos modos.
Pro dinámico: la huella de memoria de su proceso es menor, porque la memoria utilizada para la biblioteca se amortiza entre todos los procesos que la utilizan.
Pro dinámico: las bibliotecas se pueden cargar a pedido en tiempo de ejecución; Esto es bueno para los complementos, por lo que no tiene que elegir los complementos que se utilizarán al compilar e instalar el software. Se pueden agregar nuevos complementos sobre la marcha.
Con dinamismo: es posible que la biblioteca no exista en el sistema en el que alguien está intentando instalar la aplicación o que tenga una versión que no es compatible con la aplicación. Para mitigar esto, es posible que el paquete de la aplicación deba incluir una copia de la biblioteca, por lo que puede instalarlo si es necesario. Esto también es mitigado a menudo por los administradores de paquetes, que pueden descargar e instalar las dependencias necesarias.
Las bibliotecas dinámicas son especialmente útiles para bibliotecas del sistema, como libc
. Estas bibliotecas a menudo necesitan incluir código que depende del sistema operativo y la versión específicos, porque las interfaces del kernel han cambiado. Si vincula un programa con una biblioteca de sistema estático, solo se ejecutará en la versión del sistema operativo para la que se escribió esta versión de biblioteca. Pero si usa una biblioteca dinámica, recogerá automáticamente la biblioteca que está instalada en el sistema en el que se ejecuta.