Siguiente Anterior Contenido

5. La Biblioteca GNU C

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)

5.1 Configuración

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.

5.2 Ejercicios

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.

5.3 Más Información


Siguiente Anterior Contenido