En este post te mostraré cómo compilar programas con Allegro (librería para desarrollo de videojuegos en C y C++) desde Windows usando el compilador gcc y obviamente Allegro en su versión 5.
A lo largo del tutorial te enseñaré cómo instalar el compilador, agregarlo a la PATH, incluir los headers y cosas necesarias de allegro para finalmente compilar nuestro hola mundo con Allegro 5 .
Instalando MSYS2
Anteriormente tenía algunos compiladores instalados, pero lo intenté y no pude así que mejor instalé todo desde el inicio. Simplemente fui a la siguiente página y seguí todas las instrucciones para instalar MSYS2: https://www.msys2.org/
Así que ejecuté el instalador y luego los comandos. Solo los pondré como referencia, pero en la página debe estar actualizado:
pacman -Syu
Luego busqué en el menú de Windows MSYS2 MSYS y ejecuté la aplicación para ejecutar en la terminal:
pacman -Su
Más tarde, ejecuté:
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
Cabe mencionar que acepté todo e instalé todos los paquetes ofrecidos.
Te recuerdo que yo lo instalé en C:\msys64
, pero como también instalé mingw64 agregué su ubicación (C:\msys64\mingw64\bin
) a la PATH:
Esto es para invocar a gcc
(y todos los binarios de esa carpeta) desde cualquier lugar.
Descargando Allegro
Fui a las releases: https://github.com/liballeg/allegro5/releases
Descargué la última versión, el archivo que dice x86_x64
. Ojo: no el de i686. Y debe decir dynamic. Al momento de escribir el post, el nombre es allegro-x86_64-w64-mingw32-gcc-9.2.0-posix-seh-dynamic-5.2.6.0.zip
Incluyendo archivos
Ahora hay que extraer carpeta por carpeta del zip que descargamos. Yo recomiendo abrir el zip, vamos a ver las carpetas:
- bin
- include
- lib
Ahora vamos a donde está mingw64
y copiamos el contenido (El contenido, no la carpeta) de cada carpeta del zip a esta ubicación, según el nombre de carpeta. Te guiaré paso a paso.
Todo lo que hay dentro de la carpeta bin
, lo copiamos a la carpeta bin
de mingw64
:
Lo mismo hacemos con las dos carpetas restantes. Solo como referencia, así se ve include
, mismo que debe tener la carpeta allegro5
dentro:
Y así se ve lib
:
Recuerda que si tienes otra versión o los archivos se actualizan, los nombres pueden cambiar. Esto solo es una referencia. Recuerda que estamos en mingw64
dentro de donde instalamos msys64
.
Compilando primer programa
Después de toda esta configuración reiniciamos todas las terminales que estén abiertas. Recuerda que ya tenemos a gcc
en la PATH así que podemos invocarlo desde cualquier lugar.
Creamos un archivo main.c
con el siguiente código y lo guardamos en una ubicación fácil de recordar:
#include <allegro5/allegro5.h>
#include <allegro5/allegro_font.h>
#include <stdbool.h>
int main()
{
al_init();
al_install_keyboard();
ALLEGRO_TIMER *timer = al_create_timer(1.0 / 30.0);
ALLEGRO_EVENT_QUEUE *queue = al_create_event_queue();
ALLEGRO_DISPLAY *disp = al_create_display(320, 200);
ALLEGRO_FONT *font = al_create_builtin_font();
al_register_event_source(queue, al_get_keyboard_event_source());
al_register_event_source(queue, al_get_display_event_source(disp));
al_register_event_source(queue, al_get_timer_event_source(timer));
bool redraw = true;
ALLEGRO_EVENT event;
al_start_timer(timer);
while (1)
{
al_wait_for_event(queue, &event);
if (event.type == ALLEGRO_EVENT_TIMER)
redraw = true;
else if ((event.type == ALLEGRO_EVENT_KEY_DOWN) || (event.type == ALLEGRO_EVENT_DISPLAY_CLOSE))
break;
if (redraw && al_is_event_queue_empty(queue))
{
al_clear_to_color(al_map_rgb(0, 0, 0));
al_draw_text(font, al_map_rgb(255, 255, 255), 0, 0, 0, "Hola mundo");
al_flip_display();
redraw = false;
}
}
al_destroy_font(font);
al_destroy_display(disp);
al_destroy_timer(timer);
al_destroy_event_queue(queue);
return 0;
}
Ahora en una terminal navegamos a ese directorio y ejecutamos:
gcc main.c -o main.exe -lallegro -lallegro_font
Puede que nos dé un aviso como:
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/liballegro.dll.a when searching for -lallegro
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/../lib/liballegro_font.dll.a when searching for -lallegro_font
No importa mientras realicé la compilación. Ahora tendremos un archivo llamado main.exe así que lo ejecutamos escribiendo:
main.exe
Y hemos compilado exitosamente nuestro primer programa con Allegro versión 5:
Por cierto, incluimos -lallegro_font
porque usamos el módulo de fuentes para mostrar el texto. Si usas más módulos o addons puede que quieras agregar más opciones al compilar. Aquí hay una lista: https://liballeg.org/a5docs/trunk/getting_started.html#structure-of-the-library-and-its-addons
Conclusión
No creas que todo esto me lo inventé yo; solo quise hacer un tutorial en español paso a paso. Todo lo que ves aquí lo saqué de la Wiki y le agregué lo que consideré pertinente: Seguí todo lo de la Wiki: https://github.com/liballeg/allegro_wiki/wiki/Quickstart#mingw-via-msys2
Recuerda que puedes usar cualquier editor; ya sea Noteped++, Sublime Text 3, Visual Studio Code, etcétera. Ya que todo se compila desde la terminal (podrías incluso hacer un makefile para no escribir el comando largo)
Te dejo con más tutoriales sobre ANSI C en mi blog.
¡Muchas gracias! Por fin he conseguido compilar un programa con esta biblioteca.