C: Hur man installerar och använder Allegro på sin Linux-dator

Det finns många olika Linux-distributioner. Även om de är ganska lika finns det saker som skiljer, och de här instruktionerna gäller i första hand för Ubuntu. Jag har provkört dem på en 64-bitars Ubuntu 14.04.

De här Linux-instruktionerna kan kännas lite mer kortfattade än Windows-instruktionerna, som kan vara mer anpassade för nybörjare.

1. Ladda hem

Vi ska börja med att ladda hem Allegro-biblioteket. Det finns tillgängligt både som källkod och som färdigkompilerade, eller "binära", versioner.

Binära versioner är enklare att installera, i synnerhet om det finns ett färdigt paket för den Linux-distribution man använder, men här beskriver vi hur man laddar hem källkoden och kompilerar den själv.

Leta fram den senaste stabila versionen. Man kan hitta den via länken Latest version på Allegro-webbplatsen liballeg.org. När jag skriver detta (29 februari 2016) heter filen allegro-5.0.11.tar.gz. Alternativt finns det en lokal kopia här: allegro-5.0.11.tar.gz (från 2016-02-29).

Om man vill ha ännu senare versioner av källkoden kan man ladda ner en ostabil version, eller till och med hämta den ur Allegro-utvecklarnas GIT-repository, men det tar vi inte upp här.

2. Andra saker som behövs

Bibliotek använder sig ibland av andra bibliotek, och av olika program och verktyg. Innan man kan installera Allegro, kan man därför behöva installera ytterligare saker. Exakt vilka det är beror på vilken Linux-distribution man kör, men på Ubuntu 14.04 behövde jag installera programmet cmake och flera bibliotek:
sudo apt-get install cmake
sudo apt-get install libx11-dev
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libxcursor-dev
sudo apt-get install libglu-dev
sudo apt-get install build-essential
Ytterligare bibliotek kan vara bra, till exempel för att hantera olika bild- och ljudformat, men det där är ett absolut minimum för att det ska gå att kompilera. Läs mer i de README-filer som finns med i tar-filen, och på (Allegro-wikin), och när det gäller Ubuntu särskilt avsnittet Ubuntu and Allegro 5.

3. Packa upp och installera Allegro

Som default kommer Allegro att installeras under /usr/local, men man kan välja andra ställen. Här väljer jag katalogen /home/padrone/allegro5/installation. Jag har valt att installera Allegro under min egen hemkatalog, så jag inte behöver kunna root-lösenordet eller ha administratörsrättigheter bara för att installera Allegro. På det här sättet går det också att ha flera olika, helt separata Allegro-installationer på samma dator.

Packa upp tar-filen:

tar xvzf allegro-5.0.11.tar.gz
Det skapas en katalog som heter allegro-5.0.5. Gå till den katalogen, konfigurera, bygg och installera:
cd allegro-5.0.11
mkdir Build
cd Build
cmake -DCMAKE_INSTALL_PREFIX=/home/padrone/allegro5/installation ..
make
make install
Det finns några exempelprogram i underkatalogerna demos och examples, som finns under katalogen Build, där vi står efter att ha gett de olika kommandona ovan. Vi provkör ett par av dem:
./demos/speed/speed
Ett exempelspel
./examples/ex_glext
Ett annat exempel

Programmen avslutas genom att man trycker ESC.

4. Gör ett program

Skapa en katalog för programmet, till exempel /home/padrone/allegrospel, och byt till den katalogen.
mkdir /home/padrone/allegrospel
cd /home/padrone/allegrospel
Skapa en källkodsfil, till exempel med namnet allegrospel.c, och skriv in eller kopiera följande programkod:

// A very simple Allegro program

#include <stdlib.h>
#include <stdio.h>
#define USE_CONSOLE
#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>

int main(int argc, char *argv[]) {
    ALLEGRO_DISPLAY *display = NULL;

    // Initializing allegro
    if (!al_init()) {
        fprintf(stderr, "Couldn't initialize allegro. Sorry.\n");
        return EXIT_FAILURE;
    }

    if (!al_init_primitives_addon()) {
        fprintf(stderr, "Couldn't initialize allegro addons. Sorry.\n");
        return EXIT_FAILURE;
    }

    // Creating a window
    display = al_create_display(400, 300);
    if (display == NULL) {
        fprintf(stderr, "Couldn't create the window.\n");
        return EXIT_FAILURE;
    }

    // Painting it green
    al_clear_to_color(al_map_rgb(0, 255, 0)); 
    al_draw_filled_rectangle(200, 100, 250, 150, al_map_rgb(255, 0, 0));
    al_flip_display();

    printf("Now you should see a green window with a red square.\n");
    printf("Press ENTER to exit.\n");
    getchar();

    // Exiting the program
    al_destroy_display(display);

    return EXIT_SUCCESS;
}

Ögna igenom programkoden och gissa vad den gör!

5. Provkör programmet

Vi använder programmet make för att bygga programmet. För att kompilatorn och länkaren ska hitta Allegro-biblioteket, lägger vi in följande rader i en fil som heter Makefile:
CC = gcc
CFLAGS += -Wall -std=c99 -pedantic
CPPFLAGS += -I/home/padrone/allegro5/installation/include
LDLIBS += -lallegro -lallegro_primitives
LDLIBS += -L/home/padrone/allegro5/installation/lib

CFLAGS är "flaggor till C-kompilatorn", och har i det här fallet egentligen inget med Allegro att göra. CPPFLAGS är "flaggor till C-preprocessorn", och här talar vi om var Allegro-bibliotekets include-filer finns. LDLIBS är argument till länkaren som talar om vilka bibliotek som programmet använder. Allegrobiblioteket är uppdelat i flera delbibliotek, och den första av de två LDLIBS-raderna (med -l) anger att de två biblioteken allegro och allegro_primitives ska användas. Den sista raden (med -L) anger en extra katalog där länkaren kan leta efter biblioteksfiler.

Sammantaget leder dessa definitioner till att programmet make kommer att använda följande kommando för att bygga spelet:

gcc -Wall -std=c99 -pedantic -I/home/padrone/allegro5/installation/include   allegrospel.c  -lallegro -lallegro_primitives -L/home/padrone/allegro5/installation/lib -o allegrospel

Eftersom vi installerade Allegro på en lite ovanlig plats hamnade biblioteksfilerna inte där de brukar finnas, och för att programmen ska hitta biblioteksfilerna vid körning kan vi behöva tala om var de finns. Det kan vi göra genom att sätta omgivningsvariabeln LD_LIBRARY_PATH. Så här skriver man i bash, som är ett av de vanligaste skalen:

LD_LIBRARY_PATH=/home/padrone/allegro5/installation/lib
export LD_LIBRARY_PATH

Kompilera och provkör programmet:

make allegrospel
./allegrospel
Om allt är rätt ska det dyka upp ett grönt fönster med en röd ruta:

Gröna rutan

Detta är det 400 gånger 300 bildpunkter stora fönster som vi skapade med anropet al_create_display(400, 300) i vårt program. Den gröna färgen skapade vi med al_map_rgb(0, 255, 0), för G:et i RGB står ju just för "grönt".

En lite lustig effekt är vad som händer om man minimerar det gröna spelfönstret, och sen öppnar det igen. Då blir det svart:

Svarta rutan

I grafiska fönstersystem, som Microsoft Windows eller Unix-världens X, brukar själva systemet inte lagra och komma ihåg innehållet i de fönster som visas på skärmen. I stället måste programmet som kör i fönstret rita upp innehållet på nytt varje gång fönstret visas, till exempel om det varit minimerat eller dolt av ett annat fönster. Men det här testprogrammet är upptaget med att stå och vänta på inmatning (med getchar), så det kan inte rita något!

(Det kan fungera annorlunda. När jag provkörde på min vanliga dator blev fönstret svart. När jag provkörde precis samma version av Ubuntu, Allegro och testprogrammet i en virtuell maskin med VirtualBox på samma dator, blev fönstret inte svart, utan när jag stängde och öppnade fönstret visades den röda rutan på grön bakgrund. Tydligen fungerade grafiken annorlunda i den virtuella maskinen.)

Mer information finns i Allegro-dokumentationen, särskilt referensmanualen och Allegro-wikin.


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 29 februari 2016