Cunado estas compilando tus fuentes en Linux una de las opciones son el tipo de enlace que quieres realizar en tus librerías estático o dinámico ¿en que se diferencian?
- Librerías estáticas (lib_nombrelibreria.a)
Una librería estática se “encastra” dentro de nuestro ejecutable lo que significa que podemos llevarlo a otro ordenador sin temer a que nos falten librerías.
pero si las librerías tienen un bug y aparece una versión que arregla ese fallo tienes que recompilar el código
son mas grandes al llevar las librerías encastradas
son mas rápidos en la ejecución porque las funciones están dentro del ejecutable no tenemos que buscarlas
- Librerías dinámicas (lib_nombre_libreria.so)
Una librería dinámica no se “encastra” dentro de nuestro ejecutable por lo que nuestro ejecutable sera mas pequeño pero
Si nos llevamos nuestro ejecutable a otra maquina las librerías tienes que ir con el
La ejecución es mas lenta a causa de tener que ir a buscar la librería fuera del ejecutable
Si existe un bug en la librería se actualiza y arreglado en todos los ejecutables que la usan , si es un cambio en una función (mas parámetros,cambio de comportamiento ..) tenemos que volver a compilar todo.
¿Como se compilan?
Estaticas
- Crear los ficheros objero (.o) a partir de nuestro codigo fuente (.c)
gcc -c fuente.c -o fuente.o
- Crear las librerías (.a)
ar -rv libnombre.a fuente1.o fuente2.o … fuenten.o
Dinámicas
- Crear los ficheros objeto
gcc -c fuente.c -o fuente.o
- Crear las librerias dinamicas
ld -o liblibreria.so objeto1.o objeto2.o … -shared