usuarios una tipos son que los home fichero entre directorios directorio diferencia cuáles cuál cual carpeta archivo linux memory-management static-libraries ld shared-libraries

una - home en linux



¿Cuál es la diferencia entre los archivos de biblioteca.so,.la y.a? (1)

Sé que un archivo .so es un tipo de biblioteca dinámica (muchos subprocesos pueden compartir dichas bibliotecas, por lo que no es necesario tener más de una copia en la memoria). Pero, ¿cuál es la diferencia entre .a y .la ? ¿Son estas todas las bibliotecas estáticas?

Si las bibliotecas dinámicas tienen grandes ventajas sobre las estáticas, ¿por qué todavía hay muchas bibliotecas estáticas?

También quiero saber el mecanismo subyacente para cargar bibliotecas (ambos tipos) y cómo se invoca un fragmento de código en una lib cuando se usa en alguna parte. ¿Qué parte del kernel debería estudiar? ¿Y qué comando / utilidad de Linux debo conocer para saber cómo se está ejecutando un proceso? (Solo sé el comando ld por ahora)

¿Cuándo debería intentar construir código en .so o .a ? ¿Cuál es mejor?

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l total 96 -rw-r--r-- 1 mirror mirror 22892 Sep 2 23:25 openvpn-plugin-auth-pam.a -rwxr-xr-x 1 mirror mirror 931 Sep 2 23:25 openvpn-plugin-auth-pam.la -rwxr-xr-x 1 mirror mirror 23621 Sep 2 23:25 openvpn-plugin-auth-pam.so -rw-r--r-- 1 mirror mirror 17228 Sep 2 23:25 openvpn-plugin-down-root.a -rwxr-xr-x 1 mirror mirror 932 Sep 2 23:25 openvpn-plugin-down-root.la -rwxr-xr-x 1 mirror mirror 18805 Sep 2 23:25 openvpn-plugin-down-root.so


.so 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 archivos son bibliotecas estáticas . El sufijo significa "archivo", porque en realidad son solo un archivo (hecho con el comando ar , un predecesor de tar que ahora se usa para crear bibliotecas) de los archivos de objeto .o originales.

.la archivos .la son archivos de texto utilizados por el paquete GNU "libtools" para describir los archivos que componen la biblioteca correspondiente. Puede encontrar más información sobre ellos en esta pregunta: ¿Para qué sirve el archivo .la de libtool?

Las bibliotecas estáticas y dinámicas tienen pros y contras.

Static pro: 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.

Condición 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 sí mismos, es posible que tenga que hacer esto de todos modos.

Dynamic pro: la huella de memoria de su proceso es menor, porque la memoria utilizada para la biblioteca se amortiza entre todos los procesos que utilizan la biblioteca.

Dynamic pro: las bibliotecas se pueden cargar bajo demanda 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.

Las bibliotecas dinámicas son especialmente útiles para las bibliotecas del sistema, como libc . Estas bibliotecas a menudo necesitan incluir código que dependa 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ática, solo se ejecutará en la versión del sistema operativo para el que se escribió esta versión de la biblioteca. Pero si usa una biblioteca dinámica, recogerá automáticamente la biblioteca que está instalada en el sistema en el que se ejecuta.