abril 19, 2024

BitCuco

¡Hola Mundo!

Herramientas de compilación GNU

Dentro del mundo de los compiladores y depuradores, existen una gamma de herramientas de compilación GNU para desarrollar cualquier tipo de proyecto de software, desde compilar bibliotecas para el kernel de Linux, hasta el desarrollo de aplicaciones a nivel cliente.

El ciclo de compilación requiere de herramientas que permiten a los usuarios no solamente generar los códigos objeto, sino requieren de una construcción de elementos que permiten a los desarrolladores de sistemas embebidos utilizar los módulos del kernel y otras bibliotecas para crear sus sistemas. Así mostramos algunas de éstas herramientas, que tal vez las utilices todos los días o bien no conocías. ¡Empecemos!

Compilador GCC

La aplicación gcc ha sido la herramienta de compilación de GNU favorita por los desarrolladores, debido a su portabilidad y ser de código libre, es además el más utilizado para compilar código en C, C++, etc. Su nivel para compilar código a nivel medio permite desarrollar sistemas embebidos y servicios que utilizan los módulos del núcleo (kernel) y también procesar información obtenida del hardware y de hilos POSIX.

El compilador se encuentra preconfigurado para usar la biblioteca de GNU C Standard, sin embargo puede también utilizar bibliotecas alternas como la de peso ligero uClibc.

Para compilara un código en lenguaje C, siempre y cuando no utilice alguna biblioteca externa o módulos adicionales, se puede hacer de forma sencilla con ésta instrucción en la línea de comandos:

gcc ejemplo.c -o ejemplo

En la línea anterior ejemplo.c es el archivo con el código fuente en C, y con la opción –o obtenemos un archivo ejecutable de salida, ejemplo en éste caso, el cuál es el producto obtenido del compilado de nuestro código fuente.

Si se requiere una biblioteca externa, se debe especificar al momento de compilación, por ejemplo si se desea compilar la biblioteca de pthreads POSIX la compilación sería:

gcc ejemplo.c -o ejemplo -pthread

Depurador GDB

GDB es una herramienta para depurar código a través de comunicaciones (TCP o serial) en un host que ejecuta GDB. Éste es un programa externo, que tiene la capacidad de escuchar los eventos de la aplicación y atrapar las excepciones al aparecer para mostrarlas al usuario. Tiene una gamma de lenguajes que soporta, desde C, Ensamblador, Go, Ada, Objective-C, etc.

BusyBox

Es una herramienta de código abierto muy útil para desarrollar Sistemas Operativos con núcleo Linux. BusyBox es una colección de programas escenciales para todo kernel, bajos de peso y altamente configurables. Así que es un componente clave para el desarrollo de Sistemas Operativos o Embebidos. Gran parte de las aplicaciones contenidas en los directorios /bin y /sbin se encuentran contenidos aquí.

En otro momento mostraremos cómo desarrollar un Sistema Operativo Mínimo utilizando ésta herramienta.

Automake, Autoconf y Make

Es una herramienta de código abierto que genera automáticamente un Makefile. Hace uso de Autoconf para construir un ambiente para construir un proyecto o módulo.

Para crear un módulo con automake, primero creamos nuestro código fuente, que en éste ejemplo estilo hola mundo, se llamará hola.c

#include 
#include 
int main (void) {
             puts ("¡Hola Mundo!");
             puts ("Este paquete es parte de " PACKAGE_STRING ".");             return 0; }

Ahora ejecutamos autoscan, con ésto se genera un archivo configure.scan, el cual habrá que modificar a configure.ac:

mv configure.scan configure.ac

Editamos configure.ac, de modo que deberá contener el siguiente contenido:

AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AM_INIT_AUTOMAKE([-Wall -Werror foreign]) 
AC_PROG_CC 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT 

Creamos ahora un archivo Makefile.am, conteniendo solo lo siguiente:

SUBDIRS = src

Y también crear el archivo src/Makefile.am, con lo siguiente:

bin_PROGRAMS = hola
hola_SOURCES = hola.c

Finalmente escribimos en el shell los siguientes comandos, para generar el archivo de configuración que contendrá los comandos. Con ello creamos el ambiente que con posterioridad make invocará las compilaciones construidas.

aclocal
autoheader
automake --add-missing
autoconf

Finalmente la construcción del ejecutable se hace a través del configurado, de la siguiente forma:

./configure
make
# Si se desea crear un tarball para distribuir, ejecutar
make dist

Make realiza la inyección de dependencias y compilaciones necesarias para crear el ejecutable para el ambiente específico.