Lo siguiente que ocurre cuando tu computador arranca es que se carga y ejecuta init. Sin embargo, init, como todos los programas, utiliza funciones de las bibliotecas.
Puede que hayas visto un ejemplo de programa en C como éste:
main() { printf("¡Hola Mundo!\n"); }
El programa no contiene ninguna definición de printf
, así que ¿de dónde viene? Viene
de las bibliotecas estándar de C, en un sistema GNU/Linux, glibc. Si compilas bajo Visual C++,
entonces viene de una implementación de Microsoft de las mismas funciones estándar. Hay tropecientas
funciones estándar, para matemáticas, cadenas, fecha/hora, asignación de memoria y así. Todo en Unix
(incluído Linux) está escrito en C o tiene que fingir lo mejor posible que lo está, así que todo usa
estas funciones.
Si miras en /lib
en tu sistema Linux verás montones de archivos llamados
libalgo.so
o libalgo.a
etc. Son las bibliotecas de estas funciones.
Glibc es sólo la implementación GNU de esas funciones.
Hay dos formas en las que los programas pueden usar estas bibliotecas de funciones. Si enlazas
un programa estáticammente, estas bibliotecas de funciones se copian dentro del ejecutable
que creas. Para eso son las bibliotecas libalgo.a
. Si enlazas un programa
dinámicamente (y ésta es la opción básica), entonces cuando el programa esté ejecutándose
y necesite el código de la biblioteca, lo tomará del archivo libalgo.so
.
El comando ldd
es tu amigo cuando quieres averiguar qué bibliotecas se necesitan
para un programa particular. Por ejemplo, estas son las bibliotecas que usa bash
:
[greg@Curry power2bash]$ ldd /bin/bash libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000) libc.so.6 => /lib/libc.so.6 (0x4001d000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Algunas de las funciones de las bibliotecas dependen de dónde estés. Por ejemplo, en Australia
escribimos las fechas como dd/mm/aa, pero los americanos las escriben mm/dd/aa. Hay un programa que
viene con la distribución de glibc
llamado localedef
que te permite
ajustar esto.
Usa ldd
para averiguar qué bibliotecas usan tus aplicaciones favoritas.
Usa ldd
para averiguar qué bibliotecas usa init
.
Haz una biblioteca de juguete, con una o dos funciones dentro. Para crearlas se usa el programa
ar
, la página man de ar
puede ser un buen sitio para empezar a investigar
cómo se hace. Escribe, compila y enlaza un programa que use esa biblioteca.