java

Compilando Allegro 5 con GCC en Windows

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.

Compilando primer programa de Allegro 5 en Windows

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:

Agregar msys2 mingw64 a la PATH de Windows

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:

Agregar dll de allegro a bin en mingw64 para compilar desde Windows

Lo mismo hacemos con las dos carpetas restantes. Solo como referencia, así se ve include, mismo que debe tener la carpeta allegro5 dentro:

Copiar allegro5 a carpeta include de mingw64

Y así se ve lib:

Copiar liballegro a lib de mingw64

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:

Compilando primer programa de Allegro 5 en Windows

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

4 días hace

Esta web usa cookies.