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 Git Quellcode compilieren

von RedakteurMODSeite 1 von 1

Seit einiger Zeit wird der Code des FreeBASIC-Compilers nicht mehr in einem SVN-Repository verwaltet, sondern in einem Git-Repo. Hinzu kamen viele Änderungen am Build-System, sodass der Compiler nicht mehr wie früher compiliert werden kann. Im Allgemeinen ist es nicht nötig, sich den Compiler in der Development-Version zu compilieren, doch kann es durchaus nützlich sein, um neue Funktionen auszuprobieren oder zu nutzen. In diesem Tutorial erkläre ich, wie der Compiler für Windows oder Linux compiliert werden kann.

Es wird ein Grundverständnis vorausgesetzt, sodass nicht alles bis ins letzte Detail erläutert wird.

Source Code runterladen

Der Code kann bei SourceForge unter Externer Link!http://sourceforge.net/p/fbc/code/ eingesehen werden.
Mittels Git-Client kann der Code von git://git.code.sf.net/p/fbc/code heruntergeladen werden.
Ein Git-Client für Windows könnte z. B. Externer Link!TortoiseGit sein. Weiterhin benötigt man Externer Link!MSYS Git.

Vorbereitung

Zu aller erst, muss das System für den Prozess vorbereitet werden. Dazu sind verschiedene Programme/Pakete nötig.

Doch zu aller erst: FreeBASIC ist ein selfhosting compiler, das bedeutet, dass er sich selbst compiliert. Dafür ist also eine bestehende FreeBASIC-Installation nötig. Auch wenn ältere Versionen oft gehen, empfehle ich, immer die aktuellste zu verwenden. Unter Windows sollte man den Pfad zum Compiler zudem zur PATH-Variable beifügen.

Windows
Um FreeBASIC unter Windows zu compilieren, sollte man sich Externer Link!MinGW/MSYS installieren. Dazu ladet euch die letzte Version von Externer Link!mingw-get runter und extrahiert es nach C:\MinGW. Danach öffnet eine CMD und gebt folgendes ein:

cd C:\MinGW\bin
mingw-get update
mingw-get upgrade
mingw-get install <Paketname>

<Paketname> ist dabei durch diese Pakete zu ersetzen:

Über C:\MinGW\msys\1.0\msys.bat kann man die MinGW Shell starten, die zum Compilieren benötigt wird.

Weiterhin benötigt man für FreeBASICs fbgfx2 DirektX Header, insbesondere ddraw.h und dinput.h. Diese kann man diesem Externer Link!Paket entnehmen und in C:\MinGW\include einfügen.

Linux
Ein 32bit Linux benötigt folgende Pakete:

Ein 64bit Linux benötigt folgende Pakete (ohne Gewähr):

FreeBASIC compilieren

Windows
Mit der MSYS Shell sollte man zunächst in den Ordner wecheln, in dem sich der Code befindet, danach kann auch schon compiliert werden. Das sieht im Einzelnen wie folgt aus:

cd /C/Pfad/zum/Code/fbc
make clean
make

Nach dem Compilieren liegt der Compiler im Ordner new. Weiterhin benötigt der Compiler eine Reihe anderer Programme und Dateien, um lauffähig zu sein:

Diese können der aktuellen FB-Version entnommen werden, oder aus dem Ordner C:\MinGW\bin\. GoRC.exe gibt es in der aktuellsten Version unter Externer Link!http://www.godevtool.com/.

Die benötigten Libs liegen in C:\MinGW\lib\ und C:\MinGW\lib\gcc\mingw32\version\. Gebraucht werden folgende Libs:
C:\MinGW\lib\

C:\MinGW\lib\gcc\mingw32\version\

Linux
Unter Linux reicht es, im entsprechenden Code-Ordner ein Terminal zu öffnen und folgendes einzugeben:

make

Um den Compiler auch gleich unter /usr/local zu installieren, kann man alternativ auch folgendes tun:

make install

Aktualisierungen

Zunächst einmal, sollte man den Code aktualisieren:

git pull

Danach genügt auch wieder ein einfaches make zum Compilieren.

Compile-Optionen

Um den Compiler mit bestimmten Optionen zu compilieren, kann man diese einfach angeben. Dazu sollte vorher alles aufgeräumt werden:

make clean-compiler
make OPTIONFLAG=OPTION

Für OPTIONFLAG=OPTION gibt es einige Möglichkeiten:

Bekannte Probleme

Win32 rtlib compilation error: _controlfp, _PC_64 undeclared

CC new/libfb/hinit_win32.o
rtlib/hinit_win32.c: In function 'fb_hInit':
rtlib/hinit_win32.c:21:5: warning: implicit declaration of function '_controlfp' [-Wimplicit-function-declaration]
rtlib/hinit_win32.c:21:17: error: '_PC_64' undeclared (first use in this function)

Sowohl MinGW als auch MinGW GCC besitzen eine float.h, wodurch in manchen Fällen die falsche Version verwendet wird.
Um den Fehler zu beheben, kann man einfach am Ende der Datei C:\MinGW\lib\gcc\mingw32\version\include\float.h ein #include_next <float.h> anhängen.

Warning: .drectve ... unrecognized when linking fbc

CC new/compiler/bfd-wrapper.o
LINK new/bin/fbc.exe
Warning: .drectve `-aligncomm:"_FB_bfd_format",2 '
Warning: .drectve `-aligncomm:"_FB_bfd_architecture",2' unrecognized

Hierbei gibt es ein Problem beim Linken der richtigen libbfd-Version. Dabei handelt es sich nur um eine Warnung und keinen Fehler.
Um die Warnung zu entfernen, sollte man die ld.exe im FreeBASIC-Ordner mit der aus dem MinGW-Ordner ersetzen.

fbc crasht in einer bfd_*() Funktion der libbfd
Im make-Prozess sollte DISABLE_OBJINFO=1 angegeben werden, um diesen Fehler vollständig zu umgehen.

Fehler beim kompilieren der rtlib: "wchar.h:644:2: error: unknown type name 'dev_t' "
In aktuellen MinGW Versionen, genauer im Paket "mingwrt-4.x.x-x-mingw32-dev" befindet sich ein Fehler in der Header-Datei "wchar.h" (im "include" Ordner des MinGW-Installationsverzeichnisses). In der Version 4.0.3-1 müssen dazu ab Zeile 644 vier Unterstriche eingefügt werden, sodass der Code wie folgt aussieht:

struct _stat64 {
    _dev_t     st_dev;  /* Equivalent to drive number 0=A 1=B ... */
    _ino_t     st_ino;  /* Always zero ? */
    _mode_t    st_mode; /* See above constants */
    short      st_nlink;    /* Number of links. */
    short      st_uid;  /* User: Maybe significant on NT ? */
    short      st_gid;  /* Group: Ditto */
    _dev_t     st_rdev; /* Seems useless (not even filled in) */
    _off64_t   st_size; /* File size in bytes */
    __time64_t st_atime;    /* Accessed date (always 00:00 hrs local
                 * on FAT) */
    __time64_t st_mtime;    /* Modified time */
    __time64_t st_ctime;    /* Creation time */
};

Andere Versionen unterscheiden sich möglicherweise geringfügig, sodass die Zeilennummern nicht mehr übereinstimmen. Weitere Informationen dazu im zugehörigen Externer Link!Foren-Thread (engl.).

 

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

  Versionen Versionen