Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

FreeBasic aus dem SVN Quellcode kompilieren

von RedakteurSt_WSeite 1 von 1

Wichtiger Hinweis vorab!

Die Informationen in diesem Tutorial beziehen sich vor allem auf ältere Versionen von FreeBASIC. Geschrieben wurde dieser Artikel hier, als FreeBASIC noch im SVN-Repository verwaltet wurde. Sie finden hier ein neueres Tutorial, das den aktuellen Stand in Sachen FB und Git widerspiegelt.

(Altes) Tutorial

Ich möchte Euch in diesem Tutorial erklären, wie man den FreeBasic Compiler aus dem aktuellen SVN Quellcode für die Windows Plattform erstellt (Linux und DOS folgen möglicherweise später).

Einleitung

Normalerweise muss man den Compiler nicht selbst kompilieren, sondern verwendet die bereitgestellte stabile Version. Dennoch ist es für fortgeschrittene Programmierer interessant, einen Blick unter die Haube des Compilers zu werfen. Weiters sind in der SVN Version im Gegensatz zur stabilen Version oft neue Funktionen enthalten, die aber eventuell noch nicht immer richtig funktionieren müssen. Es wird auch hier und da vorkommen, dass die SVN Version fehlerhaft ist und sich gerade nicht kompilieren lässt - es handelt sich eben um den aktuellen Entwicklungsstand des Compilers.

Ich möchte mit einer "Zutatenliste" beginnen. Folgendes wird grundsätzlich benötigt:

Ich setze Folgendes voraus:

Ich arbeite unter einem neu installierten Microsoft Windows XP Media Center Edition mit Service Pack 3, es sollten aber auch andere Windows Versionen funktionieren (Windows 2000 und höher auf jeden Fall). Alle weiteren verwendeten Programme werden im folgenden erwähnt. Ich verwende Versionen, die möglicherweise bald schon wieder veraltet sind. Ihr sollt natürlich die jeweils aktuelle Version herunterladen und verwenden.
Ich habe alle in diesem Artikel besprochenen Vorgehensweisen selbst auf dem Testsystem mit Erfolg getestet, dennoch kann ich natürlich nicht garantieren dass diese Vorgehensweise auch in Zukunft immer klappt.

Wenn eventuelle Fragen nach dem Lesen des Artikels oder Fragen zur Anwendung des Beschriebenen auftreten, bin ich unter dem Kürzel "St_W" im offiziellen FreeBasic Forum, im deutschen FreeBasic Forum und in den beiden FreeBasic IRC Channels auf FreeNode auffindbar.


1. Einrichtung der benötigten Programme

1.1 Herunterladen der benötigten Dateien

Unter Windows wird der MinGW im Verbindgung mit MSYS eingesetzt.
Die Software gibt es unter folgender Adresse zum Herunterladen: Externer Link!http://sourceforge.net/projects/mingw/files/
MinGW und MSYS kann man durch viele kleine Pakete individuell zusammenstellen, welche man alle einzeln herunterladen könnte. Ich empfehle aber nur den aktuellen Installer von MingGW und MSYS herunterzuladen, welcher automatisch die gewünschten Pakete herunterlädt.
Von der obigen Seite benötigt ihr also aus dem Ordner "MSYS Base System" die aktuelle Version von MSYS (zu meinem Zeitpunkt im Unterordner "msys-1.0.11" die Datei "MSYS-1.0.11.exe") und aus dem Ordner "Automated MinGW Installer" die aktuelle Version des MinGW Installers (zu meinem Zeitpunkt im Unterordner "MinGW 5.1.6" die Datei "MinGW-5.1.6.exe").

1.2 Installation und Einrichtung vom Compiler MinGW

Zuerst muss der MinGW Compiler installiert werden. Während der Installation wird eine Internetverbindung benötigt, da die verwendeten Pakete während der Installation heruntergeladen werden (in den Ordner, in dem sich die Installationsdatei befindet). Bei der Installation von MinGW muss zusätzlich zu den "MinGW Base Tools" "MinGW Make" ausgewählt werden (siehe Abbildung 01). Weiters empfehle ich stark den Standard-Installationsordner "C:\MinGW" nicht zu ändern, da alle folgenden Erklärungen von einer Installation in diesem Ordner ausgehen.

MinGW Installation - Komponentenauswahl

Zum Kompilieren der gfxlib wird weiters ein MinGW Paket benötigt, dass nicht vom Installer unterstützt wird. Das ZIP-Archiv kann man unter folgender Adresse herunterladen: Externer Link!http://www.streetcds.co.uk/dx/dx80_mgw.zip
Das ZIP-Archiv muss nach dem Herunterladen in den Ordner "C:\MinGW" entpackt werden.

1.3 Installation und Einrichtung von MSYS

Als nächstes wird MSYS installiert und eingerichtet. Ich empfehle wiederum den Standard-Installationsordner "C:\msys\1.0" beizubehalten. Am Ende der Installation startet sich ein Konfigurationsprogramm, in welchem zweimal mit "y" bestätigt und dann den Pfad zu MinGW "C:/MinGW" (man beachte den normalen Schrägstrich) eingibt (siehe Abbildung 02)

MSYS Post Install

1.4 Konfiguration des FreeBasic Compilers

Da der FreeBasic Compiler in der Programmiersprache FreeBasic geschrieben ist, wird die aktuellste Compilerversion zum erstellen der neuen Compilerversion benötigt. Dass sich ein Compiler sozusagen selbst kompiliert mag möglicherweise im ersten Augenblick etwas seltsam klingen, in der Praxis kommt es aber nicht selten vor, dass Compiler in ihrerer eigenen Programmiersprache geschrieben sind.

Wenn sich noch keine aktuelle Version des FreeBasic Compilers auf Eurem PC befindet, dann ladet eine herunter und installiert diese. Den aktuellen Compiler findet ihr auf folgender Seite im Unterordner "Binaries - Windows" zum Download: Externer Link!http://sourceforge.net/projects/fbc/files/
Die zu meinem Zeitpunkt aktuelle Version 0.20.0b kann direkt mit folgendem Link heruntergeladen werden: FreeBASIC-v0.20.0b-win32.exe

Damit MSYS den Compiler verwenden kann kopieren wir diesen in den MSYS Ordner und tragen den Pfad in die "PATH" Umgebungsvariable ein. Dazu geben wir in der MSYS Konsole (Auf dem Desktop oder im Startmenü sollte sich eine Verknüpfung zum Start von MSYS befinden) die folgenden Befehle ein:

mkdir /FBbin
cp -rvp "/c/Programme/FreeBASIC"/* /FBbin

Wenn ihr etwas Linux Grundwissen habt sollte euch die Bedeutung der Befehle klar sein, trotzdem erkläre ich kurz was dabei passiert. Mit dem ersten Befehl wird der Unterordner "FBbin" im MSYS Hauptordner erstellt (zu finden unter "C:\msys\1.0"). Der zweite Befehl kopiert alle Dateien von C:\Programme\FreeBasic rekursiv in den eben erstellten Ordner. Wenn ihr den FreeBasic Compiler in einem anderen Ordner installiert habt, müsst ihr den Pfad natürlich demensprechend ändern ("cp -rvp "/d/Programmierung/FreeBasic Compiler"/* /FBbin" würde es z.B. lauten, wenn der Compiler unter "D:\Programmierung\FreeBasic Compiler installiert ist). Anstatt FreeBasic mit dem Konsolenbefehl nach "C:\msys\1.0\FBbin" zu kopieren kann man ebenso den Explorer verwenden.
Wie bereits oben gesagt müssen wir noch den Compilerpfad zur Umgebungsvariable "PATH" hinzufügen. Diese enthält normalerweise mehrere (kann aber genausogut keinen oder einen) mit Doppelpunkt getrennte Pfadangaben, die angeben, in welchen Ordnern MSYS nach ausführbaren Dateien sucht. Folgender Befehl schreibt "export PATH="$PATH:/FBbin"" ans Ende der Datei "/etc/profile" (Ebenso kann man stattdessen diese Datei mit einem Texteditor öffnen und die Zeile hinzufügen):

echo 'export PATH="$PATH:/FBbin"' >> /etc/profile

Diese Datei wird bei jedem Start von MSYS abgearbeitet. Damit die Änderungen in Kraft treten muss man also MSYS neu starten.


2. Herunterladen des FreeBasic Quellcodes

Der Quellcode von FreeBasic ist für jeden frei (ohne Anmeldung, Kosten) verfügbar und wird mit dem Versionsverwaltungssystem SVN verwaltet.

Für alle, die sich unter SVN nichts vorstellen können eine kurze Erklärung: SVN ist wie schon oberhalb erwähnt ein Versionsverwaltungssystem und ermöglicht das zeitgleiche Bearbeiten des Quellcodes von mehreren Entwicklern. Wie der Name schon sagt, kann man damit verschiedene Softwareversionen verwalten. Jede Änderung wird mitprotokolliert und man kann diese jederzeit rückgängig machen. Die Ordnerstruktur, in welchen sich die unterschiedlichen Quellcodeversionen befinden, sind auf oberster Ebene in "trunk", "tags" und "branches" unterteilt. Im "trunk" befindet sich die aktuelle (Haupt-)Entwicklungsversion, im "tags" Ordner werden verschiedene Versionen festgehalten (üblicherweise befinden sich hier die Quellcodes der veröffentlichten stabilen Versionen) und im "branches" Ordner befinden sich Parallelentwicklungen, die noch nicht in den Quellcode der Software aufgenommen wurden.
Wir benötigen in unserem Fall nur den "trunk"-Ordner, denn darin befindet sich der aktuelle Quellcode.

Um den Quellcode vom SVN-System herunterzuladen benötigt man einen SVN-Client. Ich stelle im folgenden zwei Varianten vor - eine zum Download per Konsolenbefehl und die andere zum Download mit Grafischer Oberfläche. Auch wenn ihr nur eine der zwei Möglichkeiten zum Herunterladen verwendet, empfehle ich trotzdem beide Programme einzurichten.

2.1 Herunterladen mittels grafischer Oberfläche - TortoiseSVN

Ich empfehle für Windows den Client "Tortoise SVN", den man unter folgender Adresse herunterladen kann: Externer Link!http://tortoisesvn.net/downloads
Auf dieser Seite findet man sowohl eine 32-Bit als auch eine 64-Bit Version. Ich habe außerdem noch das Deutsche Sprachpaket heruntergeladen, dass etwas weiter unten auf der selben Seite zu finden ist.

Nach der Installation (mit Standardeinstellungen; der Installationsordner kann beliebig gewählt werden) von Tortoise SVN und optional dem Sprachpaket, die hoffentlich kein Problem darstellen sollte, können wir nun den Quellcode herunterladen. Um bei installiertem Sprachpaket die Sprache auf Deutsch umzustellen reicht ein Rechtsklick im Explorer um im neuen Menü "Tortoise SVN" die Einstellungen ("Settings") zu öffnen, dort als Sprache ("Language") Deutsch auszuwählen und zu bestätigen. Ich verwende im folgenden TortoiseSVN 1.5.8.15348 mit den deutschsprachigen Bezeichnungen.

TortoiseSVN - Auschecken

Um den Quellcode herunterzuladen reicht wieder ein Rechtsklick im Explorer auf einen freien Bereich --> "SVN Auschecken...". Im erscheinenden Dialog als "URL des Projektarchivs" "https://fbc.svn.sourceforge.net/svnroot/fbc/trunk/FreeBASIC" und als "Zielordner" "C:\msys\1.0\home\[Benutzername]\fbcsvn\FreeBASIC" angeben, wobei "[Benutzername]" durch den Windows-Benutzernamen zu ersetzen ist (siehe Abbildung 3). Der Ordner mit dem Benutzernamen sollte aber ohnehin schon existieren, nur die beiden Unterordner "fbcsvn\FreeBASIC" sind neu. Die restlichen Einstellungen des Dialogs kann man bei den Standardeinstellungen belassen, um dann mit "OK" das Herunterladen zu beginnen.

2.2 Herunterladen mittels Konsolenbefehl

Die Kommandozeilenversion von Subversion (SVN) kann man unter folgender Adresse herunterladen: Externer Link!http://subversion.tigris.org
Benötigt wird nicht der Installer, sondern das aktuelle win32 ZIP-Paket (zu meinem Zeitpunkt "svn-win32-1.5.6.zip"), welches dann entpackt werden muss.

Ich empfehle den Ordner in "svn" umbennen und diesen nach "C:\msys\1.0" zu verschieben, sodass sich unter "C:\msys\1.0\svn\bin" die "svn.exe" befindet. Damit MSYS die Datei findet muss der Pfad wieder zur PATH Umgebungsvariable hinzugefügt werden. Dazu einfach folgendes in der MSYS Konsole eingeben:

echo. && echo 'export PATH="$PATH:/svn/bin"' >> /etc/profile

Wenn SVN bereits in einem anderen Ordner installiert wurde oder meine Empfehlung nicht gefällt, muss nur der Pfad "/svn/bin" entsprechend angepasst werden, sodass er auf "svn.exe" verweist.

Anschließend die folgenden Befehle eingeben, um den Ordner "fbcsvn" zu erstellen, in diesen zu wechseln und den Quellcode herunterzuladen:

mkdir ~/fbcsvn
cd ~/fbcsvn
svn co https://fbc.svn.sourceforge.net/svnroot/fbc/trunk/FreeBASIC FreeBASIC

Beim letzten Befehl sieht man normalerweise eine Zeit lang am Anfang kein Reaktionszeichen, außer dass der Ordner "FreeBASIC" unter "~/fbcsvn" (entspricht: "C:\msys\1.0\home\[Benutzername]\fbcsvn") erstellt wurde, später werden die heruntergeladenen Dateien aufgelistet. Dieser Vorgang kann je nach Internetverbindung eine Zeit lang dauern.


3. Kompilieren von FreeBASIC

Da sich nun alle benötigten Programme eingerichtet sind und sich der FreeBasic Quellcode unter "~/fbcsvn/FreeBASIC/src" (entspricht: "C:\msys\1.0\home\[Benutzername]\fbcsvn\FreeBASIC\src") finden lässt kann nun mit dem kompilieren begonnen werden.

Das Programmierpaket FreeBasic besteht eigentlich aus drei Komponenten:

Nur der FreeBasic Compiler ist in FreeBasic geschrieben, die beiden Bibliotheken sind in C geschrieben. In der Reihenfolge wird zuerst die rtlib, dann die gfxlib und zum Schluss der Compiler kompiliert.

3.1 Kompilieren der rtlib

cd ~/fbcsvn/FreeBASIC/src/rtlib/obj/win32
../../configure
make CFLAGS=-O2 && make CFLAGS=-O2 MULTITHREADED=1

Die obigen Befehle sind (so wie die folgenden) im MSYS Terminal einzugeben. Zuerst wird dabei ins Verzeichnis der rtlib gewechselt, dort das configure Skript aufgerufen und anschließend zwei Versionen der rtlib kompiliert (Standard und Threadsafe). Auch auf neueren Computern dauert dies eine Zeit lang.
Tipp zur Eingabe: Mit der Tabulator-Taste wird die automatische Vervollständigung aufgerufen. Da bei der Eingabe von "cd ~/f" die gewünschte Eingabe schon voraussehbar ist (es gibt nur eine(n) Datei/Ordner mit Anfangsbuchstabe "f") wird z.B. beim Drücken der Tabulatortaste automatisch zu "cd ~/fbcsvn" vervollständigt.

3.2 Kompilieren der gfxlib

cd ~/fbcsvn/FreeBASIC/src/gfxlib2/obj/win32
../../configure
make CFLAGS=-O2

Anmerkung (2. Jänner 2010): Schon seit Revision 5096 (August 2008) gibt es ein Problem mit dem configure Skript der gfxlib, weshalb die oberhalb angegebene Vorgehensweise nicht funktioniert. Weiteres dazu und einen Lösungsweg findet man am Ende meines Artikels.
Ergänzung (4. Jänner 2010): Seit Revision 5275 (Jänner 2010) ist das Problem behoben und das oberhalb angegebene Verfahren funktioniert wieder.

3.3 Kompilieren des fbc

Vor dem Kompilieren ist es möglicherweise nötig die Header-Dateien zu aktualisieren. Dies ist mit folgendem Befehl schnell erledigt:

cp -prfv ~/fbcsvn/FreeBASIC/inc/* /FBbin/inc

Zum endgültigen Kompilieren nun folgende Befehlen eingeben:

cd ~/fbcsvn/FreeBASIC/src/compiler/obj/win32
../../configure --enable-standalone --enable-crosscomp-cygwin --enable-crosscomp-dos
make FB_BFD=1 BFD_VER=217

Wenn alles funktioniert hat sollte sich nun im Ordner "C:\msys\1.0\home\[Benutzername]\fbcsvn\FreeBASIC\src\compiler\obj\win32" die neue "fbc_new.exe" befinden.


4. Erneuern der FreeBasic Installation

Nachdem FreeBasic und alle erforderlichen Komponenten nun erfolgreich neu erstellt wurden müssen diese im Installationsordner von MSYS übernommen werden, damit auch folgende FreeBasic Versionen wieder mit dem neuesten Compiler kompiliert werden.

Um die alten FreeBasic Software und Bibliotheken mit den neu erstellte zu ersetzten folgende Befehle eingeben:

cp -pfv ~/fbcsvn/FreeBASIC/src/compiler/obj/win32/fbc_new.exe /FBbin/fbc.exe
cp -pfv ~/fbcsvn/FreeBASIC/src/rtlib/obj/win32/*.a /FBbin/lib/win32
cp -pfv ~/fbcsvn/FreeBASIC/src/rtlib/obj/win32/fbrt0.o /FBbin/lib/win32
cp -pfv ~/fbcsvn/FreeBASIC/src/gfxlib2/obj/win32/*.a /FBbin/lib/win32

Eventuell befinden sich in der SVN Version aktualisierte Importbibliotheken, die mit folgenden Befehlen aktualisiert werden können:

cp -pfv ~/fbcsvn/FreeBASIC/bin/win32/* /FBbin/bin/win32
cp -pfv ~/fbcsvn/FreeBASIC/lib/win32/* /FBbin/lib/win32

Wenn nicht bereits oberhalb beim Kompilieren des fbc getan, können mit folgendem Befehl die Header Dateien aktualisiert werden:

cp -prfv ~/fbcsvn/FreeBASIC/inc/* /FBbin/inc

Hinweis: Die SVN Version enthält normalerweise keine Importbibliotheken, diese müssten erst erstellt werden. Eine Anleitung dazu folgt möglicherweise später.


Anhang I - Anleitung zum Kompilieren der gfxlib ab Revision 5096 bis Revision 5275

Da wie bereits oben im Artikel erwähnt das configure Skript seit SVN Revision 5096 fehlerhaft ist, muss man derzeit eine alte Version von "config.h" verwenden, um die gfxlib zu kompilieren.
Dazu wechselt man im Explorer in den Ordner "C:\msys\1.0\home\[Benutzername]\fbcsvn\FreeBASIC\src\gfxlib2\obj\win32" und ersetzt dort die existierende "config.h" mit folgendem Inhalt: config.h
Anschließend mit "make CFLAGS=-O2" kompilieren.

Anhang II - Erstellen der Importbibliotheken

Alle vom FreeBasic Compiler benötigten GNU-Programme (Assembler, Linker) sind nicht in der SVN Version enthalten, deshalb müssen diese zuerst mit folgendem Befehl vom FreeBasic Installationsordner in den SVN Ordner kopiert werden:

cp -prfv /FBbin/bin/win32/* ~/fbcsvn/FreeBASIC/bin/win32

Nun muss gibt es ein eigenes FreeBasic Programm, dass uns die Importbibliotheken erstellt. Dieses muss zuerst mit den folgenden Befehlen kompiliert werden:

cd ~/fbcsvn/FreeBASIC/lib/win32/def/
fbc genimplibs.bas

Zum Erzeugen der Importbibliotheken genügt nun der Aufruf des eben kompilierten Programmes mit folgendem Befehl:

genimplibs.exe -p win32 -f -a

Dabei werden von allen Bibliotheken, auch von den Optionalen, Importbibliotheken erstellt. Wenn man dies nicht will muss man den Parameter "-a" im obigen Befehl weglassen.
Um die Importbibliotheken der FreeBasic Installation mit den eben erstellten zu aktualisieren ist der folgende, bereits oben im Abschnitt 4 ("Erneuern der FreeBasic Installation") genannte Befehl einzugeben:

cp -pfv ~/fbcsvn/FreeBASIC/lib/win32/* /FBbin/lib/win32

Anhang III - Automatisches Compile-Skript

Damit weitere Compile-Vorgänge nicht mehr ausschließlich manuell durchgeführt werden müssen, habe ich ein kleines Skript geschrieben, welches die in diesem Artikel besprochenen Verfahren der Reihe nach verwendet um die aktuelle SVN-Version herunterzuladen und zu kompilieren.
Dabei wird vorausgesetzt, dass die Konfiguration nach diesem Artikel bereits durchgeführt wurde und die Pfade nicht geändert wurden.
Um das Skript zu verwenden müsst ihr es zuerst herunterladen (FreeBasic Compile Skript) und z.B. als "fb_compile.sh" im MSYS-Home-Verzeichnis speichern ("C:\msys\1.0\home\[Benutzername]\"). Im folgenden gehe ich davon aus, dass die von mir gewählten Dateinamen und Pfade verwendet werden.
Der Aufruf des Skripts erfolgt mit nur einem Befehl (bzw. zwei Befehlen, wenn ein Verzeichniswechsel zuvor nötig ist):

cd ~
./fb_compile.sh all

Mit dem Parameter "all" werden alle Aktionen ausgeführt. Gebt keinen oder den Parameter "--?" an, um alle Möglichen Parameter und Funktionen anzeigen zu lassen.


Schlusswort

Nun kann ich nur noch viel Erfolg bei euren Versuchen wünschen, sodass möglicherweise nach einiger Zeit ein Compiler-Entwickler aus euch wird, denn an solchen mangelt es derzeit kräftig.

Ich hoffe ihr habt / hattet Freude beim Durcharbeiten des Artikels,
Stefan Wurzinger am 02. Jänner 2010

 

Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 02.01.2010 von RedakteurSt_W angelegt.
  • Die aktuellste Version wurde am 21.02.2012 von RedakteurMOD gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen