Tutorial SDL2 Installation

Aus DGL Wiki
Wechseln zu: Navigation, Suche
Hinweis: Dieser Artikel ist noch unvollständig.
(Mehr Informationen/weitere Artikel)

Andere Programmiersprachen/IDEs/Betriebssysteme sollten hier nachgetragen werden.

Incomplete.jpg

In diesem Tutorial wird dir gezeigt, wie du deine Entwicklungsumgebung so einrichtest, dass du SDL2-Programme entwickeln kannst. Dies ist Voraussetzung für Tutorial OpenGL3 Lektion 1. Auch wenn das Prinzip überall gleich ist, hängen die Details von der jeweils verwendeten Programmiersprache, von der Entwicklungsumgebung und vom Betriebssystem ab. Daher ist der Rest des Artikels nach Programmiersprache und IDE aufgeteilt.

Code::Blocks (C++) unter Windows

SDL2 herunterladen

Das erste, was wir benötigen, ist die Library SDL2 selbst. Diese lädst du dir hier herunter. Da wir Entwickler sind, brauchen wir nur, was im Abschnitt "Development Libraries" angeboten wird. Wer Code::Blocks einsetzt, verwendet in der Regel den MinGW-Compiler. Dies ist dann der Fall, wenn man den Compiler gleichzeitig mit Code::Blocks installiert hat. Ist dies der Fall, speichert man als die Datei "SDL2-devel-2.0.3-mingw.tar.gz" auf dem Computer. Die Versionsnummer kann sich natürlich schon geändert haben, wenn du dieses Tutorial liest. Solange sie mit 2.0 beginnt, sollte alles so funktionieren, wie hier beschrieben.

Archiv entpacken

Die heruntergeladene Datei ist ein Archiv, also eine Datei in der weitere Dateien und Ordner komprimiert gespeichert sind. Schließlich wäre es mühsam, 100 Dateien einzeln herunterzuladen, nicht wahr? ;) Um das Archiv zu entpacken, benötigst du ein Archivprogramm auf deinem Computer. Auf den meisten Computern ist das ohnehin installiert. Falls dies bei dir nicht der Fall ist, kann ich 7-zip empfehlen, welches kostenlos (sogar open-source) ist und sehr viele Formate lesen und schreiben kann - insbesondere auch das Format tar.gz. Wenn du das heruntergeladene Archiv entpackt hast, befindet sich auf deiner Festplatte ein Ordner "SDL2-2.0.3" (oder eine andere Versionsnummer).

Die richtigen Dateien am richtigen Ort

Damit der Compiler die heruntergeladenen Code-Dateien auch findet, müssen wir ihm sagen, wo sich diese befinden. Ich rate davon ab, das lokale Downloadverzeichnis (wo sich die Dateien bei dir vermutlich jetzt befinden) als Include-Pfad zu verwenden. Suche dir ein Verzeichnis auf der Festplatte aus, der deinem Ordnungssystem entspricht - auf deinem Computer herrscht doch Ordnung, oder?! ;)
Der Einfachheit halber werde ich im Folgenden einfach annehmen, dass das Verzeichnis C:\include heißt. Darin erstellst du nun einen Ordner namens "SDL2". Nun wechselst du in das von dir entpackte Verzeichnis nach SDL2-2.0.3\include und kopierst alle darin enthaltenen Dateien nach C:\include.
Außerdem brauchen wir noch ein zweites Verzeichnis für Linker-Dateien. Dieses nenne ich hier einfach mal C:\lib. Dorthin werden alle .a-Dateien kopiert, die sich im Ordner SDL2-2.0.3\i686-w64-mingw32\lib (wenn dein Programm 32bit ist) bzw. SDL2-2.0.3\x86_64-w64-mingw32\lib (falls du ein 64bit-Programm schreibst) befinden. Falls du unsicher bist, brauchst du wahrschenlich die 32bit-Version - auch wenn dein Betriebssystem 64bittig ist!

Projekteinstellungen

Falls noch nicht geschehen, startest du nun Code::Blocks und erstellst ein neues Projekt (Konsolenanwendung, "Hello World"-Beispiel). Um sicherzugehen, dass alles andere funktioniert, kompilierst du deine Anwendung erstmal und führst sie aus.
Ist dies erfolgreich, klickst du im Menü auf "Project" -> "Build options..." und wählst in dem sich öffnenden Fenster den Reiter "Search directories". Dieser enthält wiederum zwei Unterreiter "Compiler" und "Linker". Beim Unterreiter "Compiler" klickst du auf "Add" und wählst C:\include aus. Auf die gleiche Weise wählst du beim Unterreiter "Linker" das Verzeichnis C:\lib aus. Danach wechselst du noch zum Reiter "Linker settings" (neben "Search directories") und fügst folgende Zeile in die Box "other linker options" ein:

-lmingw32 -lSDL2main -lSDL2 -lopengl32

Anschließend natürlich noch mit einem Klick auf OK bestätigen.

Folgender Code sollte nun erfolgreich gebaut (kompiliert und gelinkt) werden können:

#include <iostream>
#include <SDL2/SDL.h>

int main(int argc, char* args[])
{
  if(SDL_Init(SDL_INIT_EVERYTHING) != 0)
    std::cout << "SDL_Init failed!\n";
  else
    std::cout << "SDL_Init was successful!\n";

  SDL_Quit();
  return 0;
}

DLL-Fehlermeldung

Bevor du jetzt laut "Fehlermeldung!" stöhnst: Ich sagte bauen, nicht ausführen ;) Die Ausführung funktioniert in der Tat noch nicht, da Windows bei der Ausführung des Programms vergeblich nach der Datei "SDL2.dll" sucht. Diese musst du erst noch in das Verzeichnis kopieren, in dem sich die exe-Datei deines Programms befindet. Du findest sie im Ordner SDL2-2.0.3\lib\x86 (32bit) bzw. in SDL2-2.0.3\lib\x64 (64bit).


Code::Blocks (C++) auf Linux

SDL2 herunterladen

Die meisten Linux-Distributionen bieten die benötigte SDL2-Library bereits im Standard-Repository an. Unter openSuSE z.B. startet man einfach YaST und klickt auf "Software installieren oder löschen". Im sich nun öffnenden Fenster suchst du nach "SDL2". Die Pakete "libSDL2-2_0-0" und "libSDL2-devel" sind für uns interessant. Für spätere Tutorials könnten auch "libSDL2_image-2_0-0" und "libSDL2_image-devel" nützlich sein. Nach einem Klick auf "Akzeptieren" werden die ausgewählten Paket installiert. Auf anderen Linux-Distributionen sind die Schritte ähnlich und die Pakete sollten alle "SDL2" im Namen enthalten.

Projekteinstellungen

Nach der Installation landen die SDL2-Headerdateien üblicherweise in /usr/include/SDL2/. Dieser Pfad muss in Code::Blocks nicht extra angegeben werden, sondern wird normalerweise automatisch gefunden. Jedoch muss noch eine Linker-Einstellung gemacht werden. Dazu wählst du im Menü "Project" den Eintrag "Build options..." und wählst im sich öffnenden Fenster den Reiter "Linker settings". Im Feld "other linker options" tippst du folgende Zeile ein:

-ldl -lGL -lSDL2main -lSDL2

Nun solltest du folgenden Code problemlos kompilieren und ausführen können:

#include <iostream>
#include <SDL2/SDL.h>

int main(int argc, char* args[])
{
  if(SDL_Init(SDL_INIT_EVERYTHING) != 0)
    std::cout << "SDL_Init failed!\n";
  else
    std::cout << "SDL_Init was successful!\n";

  SDL_Quit();
  return 0;
}


Delphi / Lazarus unter Windows

Für Delphi und Lazarus sind alle Schritte gleich, es gibt dann lediglich einen Unterschied beim Eintragen des Pfades im Compiler. Deswegen hier die Zusammenfassung für beide Compiler.

SDL2 herunterladen

Wir benötigen natürlich auch erst einmal die Library SDL2, diese gibt es auch für uns auf der offiziellen SDL Seite. Allerdings brauchen wir von hier lediglich die SDL2.dll mit den Programmfunktionen, also nehmen wir das entsprechende Paket der Runtime Libraries für Windows. Im weiteren Verlauf gehen wir mal von der Datei SDL2-2.0.3-win32-x86.zip aus. Die Versionsnummer kann sich natürlich in Zukunft ändern. Wichtig ist nur, dass das Archiv mit "SDL2-2." beginnt. Die 64-Bit Version benötigt man übrigens nur wenn man echte 64-Bit Programme erzeugt, also NICHT weil man ein 64-Bit Betriebssystem benutzt.

Zusätzlich benötigen wir jetzt noch Header-Dateien für Pascal, unser Compiler möchte ja auch gerne wissen, was so alles in der SDL2.dll enthalten ist ;-) Wir benutzen die Pascal-Portierung der SDL2 Header, die hier erhältlich sind. Auf der GitHub-Seite angekommen schauen wir auf der rechten Seite, dort gibt es eine Schaltfläche "Download ZIP", mit der man die Datei "Pascal-SDL-2-Headers-master.zip" erhält.

Archive entpacken

Falls noch kein geeignetes Programm zum Entpacken von ZIP-Dateien vorhanden ist -> 7-Zip. Wenn ein anderes Programm benutzt wird solltest Du ja wissen, wie die Archive damit zu entpacken sind. Mit 7-Zip machen wir einen Rechtsklick auf das Archiv und wählen aus dem erscheinenden Kontextmenü "7-Zip", es sollte dann ein Untermenü mit weiteren Befehlen erscheinen. Hier wählen wir entweder "Hier entpacken" oder "Entpacken nach <Archivname>", besser ist die zweite Option. Damit wird in jedem Fall ein Unterordner erzeugt, der so heißt wie das Archiv und in dem sich dann die entpackten Dateien befinden. Nach dem Entpacken sollten also 2 Unterordner vorhanden sein, einer namens Pascal-SDL-2-Headers-master und einer namens SDL2-2.0.3-win32-x86.

Die richtigen Dateien am richtigen Ort

Wenn Du schon andere Fremdbibliotheken verwendest, gibt es bei Dir bestimmt einen extra Ordner dafür, im weiteren Verlauf verwenden wir mal C:\Library\. In diesem erstellen wir jetzt beispielsweise einen Unterordner SDL2 und kopieren/verschieben den Inhalt des entpackten Ordners Pascal-SDL-2-Headers-master hinein. Der Pfad zur Datei sdl2.pas sieht jetzt also so aus: C:\Library\SDL2\sdl2.pas. Damit haben wir die Header schon mal an einem sinnvollen Ort.

Der Inhalt des zweiten Archivs mit der SDL2.dll wird im Projektverzeichnis deiner Anwendung benötigt, genauer: Dort wo deine ausführbare Datei erstellt wird. Wenn Du also beispielsweise ein Projekt in C:\Projekte\Beispiel\ hast und deine exe-Datei dort erstellt wird, müssen die Dateien des entpackten Ordners SDL2-2.0.3-win32-x86 dort hinein. Wenn im Projektordner Unterordner wie Debug, Release usw. für das Erstellen der ausführbaren Datei benutzt werden, muss die SDL2.dll natürlich dort hinein.

Compilereinstellungen

Um dem verwendeten Compiler nun die Library SDL2 bekannt zu machen, müssen wir ihm mitteilen in welchem Ordner wir die Header haben. Wie schon oben erwähnt gehen wir davon aus, das der Pfad C:\Library\SDL2\ lautet.

Delphi

Hier am Beispiel für Delphi 2009, in anderen Versionen sollte das ähnlich sein. Im Menü wählen wir "Tools" -> "Optionen", im erscheinenden Fenster wählen wir "Umgebungsoptionen" -> "Delphi-Optionen" -> "Bibliothek - Win32". Auf der rechten Seite wird dann der "Bibliothekspfad" angezeigt, wir drücken die Schaltfläche "..." rechts davon. Im erscheinenden Fenster "Verzeichnisse" drücken wir dann wieder die Schaltfläche "...", nun erscheint ein Explorerfenster in dem wir in den Ordner C:\Library\SDL2 auswählen und bestätigen. Im Fenster "Verzeichnisse" danach nicht vergessen auf "Hinzufügen" zu drücken, dann mit "OK" das Fenster schließen. Abschließend im Fenster "Optionen" auch mit "OK" bestätigen. SDL2 kann nun in jedem Projekt verwendet werden, es muss hier nichts mehr in den Projekt-Optionen eingestellt werden.

Lazarus

Hier am Beispiel für Lazarus 1.2.0, in anderen Versionen sollte das ähnlich sein. Im Gegensatz zu Delphi gibt es keine mir bekannte Möglichkeit SDL2 generell für alle Projekte verfügbar zu machen. Wir müssen also erst einmal ein Projekt erstellt haben und können dann SDL2 für dieses Projekt folgendermaßen verfügbar machen: Im Menü wählen wir "Projekt" -> "Projekteinstellungen", im sich öffnenden Fenster wählt man "Compilereinstellungen" -> "Pfade". Rechts ist nun der Punkt "Andere Units..." zu sehen. Analog zu Delphi drücken wir rechts daneben die Schaltfläche "...", es erscheint das Fenster "Pfadeditor". Dort die Schaltfläche mit einem gelben Ordnersymbol drücken, im erscheinenden Auswahldialog nun den Ordner C:\Library\SDL2 wählen und mit "OK" bestätigen. Im Fenster "Pfadeditor" danach nicht vergessen auf "Hinzufügen" zu drücken, dann mit "OK" das Fenster schließen. Abschließend im Fenster "Einstellungen für Projekt..." auch mit "OK" bestätigen. Nun kann SDL2 in diesem Projekt verwendet werden.


Der folgende Code sollte nun kompiliert und ausgeführt werden können, vorausgesetzt Du hast nicht vergessen die SDL2.dll in den Projektordner zu kopieren:

program Project1;

{$APPTYPE CONSOLE}

uses SysUtils, SDL2;

begin
  if SDL_Init(SDL_INIT_EVERYTHING) <> 0 then
    WriteLn('SDL2 Initialisierung fehlgeschlagen!')
  else
    WriteLn('SDL2 erfolgreich initialisiert!');
  SDL_Quit();  
  Sleep(2000);
end.

DLL-Fehlermeldung

Solltest Du beim Starten deines Programms eine Fehlermeldung bekommen (The program can't start because SDL2.dll is missing...) liegt das daran, das die SDL2-dll nicht gefunden wurde. Wie schon oben erwähnt muss diese in den gleichen Ordner kopiert werden wo deine exe-Datei ist.