Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Compilación básica
Así el GCC compilará el código fuente que haya en “codigo.c” y generará un fichero
ejecutable en “ejecutable”. Si todo el proceso se ha desarrollado correctamente, el GCC
no devuelve ningún mensaje de confirmación. En realidad la opción “-o” para indicar el
fichero de salida no es necesaria, y si no se indica se guarda el resultado de la
compilación en el fichero “a.out”.
Muchos proyectos de software están formados por más de un fichero fuente, por lo que
habrá que compilar varios ficheros para generar un único ejecutable. Esto se puede
hacer de forma sencilla llamando a GCC con varios ficheros fuente y un ejecutable:
gcc menu.c bd.c motor.c –o juego
Sin embargo es bastante probable que todos los ficheros fuente de un mismo proyecto
no se encuentren en el mismo directorio, y que conforme el proyecto crezca, existan
muchos ficheros de cabeceras (los típicos “.h”) y se alojen en directorios diferentes.
Para evitar problemas a la hora de tratar con proyectos semejantes, podemos hacer uso
de la opción “-I” e incluir los ficheros que sean necesario. Imaginemos que tenemos un
proyecto en el que todos los ficheros fuente están dentro del directorio “src” y todos los
ficheros de cabeceras están en el directorio “include”. Podríamos compilar el proyecto
de la siguiente manera:
gcc ./src/*.c –Iinclude –o juego
Paso a paso
Hasta ahora hemos dado por hecho que es normal que un compilador realice todos los
pasos necesarios para obtener un ejecutable partiendo del código fuente, si bien esto no
tiene por qué ser así. A la hora de generar un ejecutable hay una serie de procesos
implicados:
1. Edición del código fuente → código fuente.
2. Preprocesado → código fuente preprocesado.
3. Compilación → código ensamblador.
4. Ensamblado → código objeto.
5. Enlazado → ejecutable.
Si no indicamos ninguna de estas opciones, se realizarán las cuatro fases de las que se
encarga el GCC: preprocesado, compilación, ensamblado y enlazado.
Ahora ya controlamos más el proceso. Cuando un proyecto involucra muchos ficheros
es bastante normal que no todas sus partes tengan las mismas opciones de compilación.
Por ello es muy útil generar separadamente los respectivos códigos objeto, y cuando ya
estén todos generados, enlazarlos para obtener el ejecutable:
gcc –c bd.c –o bd.o
gcc –c motor.c –lgraphics –o motor.o
gcc –c menu.c –lcurses –o menu.o
gcc bd.o motor.o menu.o –o juego
Librerías
La compilación de este fichero (“menu.c”) requiere que esté instalada la librería curses
o ncurses en el sistema, por ejemplo (la librería se llamará casi con seguridad
“libncurses”). Si la librería no es una librería estándar en el sistema, sino que pertenece
únicamente a nuestro proyecto, podremos indicar la ruta empleando la opción “-L”:
gcc –c motor.c –L./libs/librería-motor –o motor.o
Programando en C para GNU/Linux
Hola, mundo!
return 0;
}
Queda fuera del ámbito de este curso explicar de forma detallada la sintaxis de C, por lo
que pasaremos a analizar el proceso de compilación desde nuestro fichero fuente
(“hola.c”) al fichero ejecutable (“hola”):
txipi@neon:~$ gcc hola.c –o hola
txipi@neon:~$ ./hola
Hola, mundo!
txipi@neon:~$
Como podemos observar, el proceso es muy sencillo. Hay que tener especial cuidado en
añadir el directorio a la hora de llamar al ejecutable (“./hola”) porque en GNU/Linux la
variable PATH no contiene al directorio actual. Así, por mucho que hagamos “cd” para
cambiar a un determinado directorio, siempre tendremos que incluir el directorio en la
llamada al ejecutable, en este caso incluimos el directorio actual, es decir, “.”