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 11.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 versionen. Man kan hitta den via länken Latest version på Allegro-webbplatsen alleg.sourceforge.net. När jag skriver detta (27 februari 2012) heter filen allegro-5.0.5.tar.gz. Alternativt finns det en lokal kopia här: allegro-5.0.5.tar.gz (från 2012-02-27).

Om man vill ha den allra senaste versionen av källkoden kan man hämta den ur Allegro-utvecklarnas Subversion-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å min Ubuntu 11.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 libglu-dev
sudo apt-get install libxcursor-dev
Ytterligare bibliotek kan vara bra, till exempel för att hantera olika bild- och ljudformat, men det där är 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 (wiki.allegro.cc).

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 en plats där jag har skrivrättigheter, så att jag inte behöver kunna root-lösenordet bara för att installera Allegro.

Packa upp tar-filen:

tar xvzf allegro-5.0.5.tar.gz
Det skapas en katalog som heter allegro-5.0.5. Gå till den katalogen, konfigurera, bygg och installera:
cd allegro-5.0.5
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
cd 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:
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:

cc -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, så för att programmen ska hitta biblioteksfilerna vid körning måste vi 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!

Mer information finns i Allegro-dokumentationen (www.allegro.cc/manual) och i Allegro-wikin (wiki.allegro.cc).


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 27 februari 2012