Cross-Compilation von Vala-Code
7. September 2010
Ein wichtiges Merkmal für eine Programmiersprache ist die Plattform-Unabhängigkeit. Da Vala den Code in C-Code kompiliert, ist Vala auch genauso Plattform-Unabhängig (mit gewissen Einschränkungen). So ist es z. B. möglich Programme von Linux nach Windows zu portieren in dem man die MinGW (Minimalist Gnu for Windows) Toolchain benützt.
Einrichten einer Cross-Toolchain in Archlinux
Da mein Haupt-Betriebssystem Archlinux ist, beschreibe ich hier die Einrichtung einer Cross-Toolchain unter Linux. Zuallererst benötigt man das Paket
$ pacman -S mingw32-gccDamit werden im Ordner /usr/i486-mingw32/ die notwendigen Standard-Libraries installiert um ein C-Programm ohne spezielle Bibliotheken so zu kompilieren, um Windows Executables zu erhalten. Dazu könnte man direkt einen Test machen
#include int main(int argc, char* argv[]) { printf("Hello World\n"); return 0; }
Dieses Programm wollen wir nun unter Linux so kompilieren, damit es auf einem Windows lauffähig ist. Dafür benützt man nun nicht den Standardcompiler gcc sondern den aus dem Paket von MinGW. Der Compileraufruf sieht dann folgendermaßen aus:
$ i486-mingw32-gcc hello.c -o test.exeDas Binärprogramm kann man nun unter Windows ausführen und es wird ein simples “Hello World” ausgegeben.
Vala-Code
Um Vala-Code übersetzen zu können, muss man einiges über die Arbeitsweise von Vala wissen. Vala nutzt die Standardlibraries von GNOME. Dazu schauen wir uns das simple Hello World mal enauer an.

Links ist der Vala-Code und rechts der entstandene C-Code. Selbst bei einem simplem Hello-World Programm bindet Vala standardmäßig die Bibliotheken glib.h und glib-object.h ein. Das sind die zugrundeliegenden Bibliotheken, die die Unterstützung der Objektorientierung für Vala liefern und noch viele andere Funktionen besitzen. Man muss bei der Kompilation von Vala Code die Bibliothek –pkg glib-2.0 eben genau deswegen nicht mitangegeben, da sie sowieso eingebunden wird. Das ist nun auch wichtig um Vala-Code auf Windows portieren zu können – den die benötigten Bibliotheken müssen immer mitgeliefert werden. Als erstes richten wir uns die Entwicklungsbibliotheken für die Kompilation ein.
Entwickler-Bibliotheken
Man benötigt für die Toolchain die Dev-Bibliotheken bestehend aus den .lib-Files und den Headerfiles. Die jeweils aktuelle Version für Windows findet man hier. Dort muss man minimalst die GLib-Dev downloaden und im Verzeichnis /usr/i486-mingw32/ entpacken. Ich empfehle aber gleich die gesamte GNOME Umgebung zu installieren um auch grafische Anwendungen kompilieren zu können. Als nächste und letzter Schritt muss noch das Helfer-Tool pkg-config installiert und angepasst werden. pkg-config ist für die Verzeichnis-Auflösung zuständig. Er ermittelt, wo die gesuchten Headerfiles stecken und übergibt diese Pfade an gcc. Im AUR befindet sich bereits ein Paket, welches pkg-config mit den richtigen Parametern startet
$ yaourt -S mingw32-pkgconfigAlternativ einfach PKGBUILD runterladen und makepkg bemühen. Nun muss noch der Pfad der .pc Files angepasst werden. Pkg-config erhält seine Informationen über sogenannte *.pc Files im Ordner /usr/i486-mingw32/lib/pkgconfig/. Wenn man sich die Inhalte der pc-Files anguckt, dann stellt man fest, dass dort eine Variable prefix definiert ist. Diese muss auf
prefix=/usr/i486-mingw32/
geändert werden und zwar in allen Files. Dafür werde ich die Tage ein Skript anhängen, um dies automatisch erledigen zu lassen.
So, finaler Absatz. Die Toolchain sollte soweit eingerichtet sein. Nun kann man sämtlichen Vala-Code mit dem Compiler-Flag -C kompilieren und anschießend mit dem GNU Compiler und der angepassten pkg-config Windows-Binaries erzeugen. Das oben angegebene Hello World Beispiel müsste man dann so kompilieren
$ i486-mingw32-gcc test.c `i486-mingw32-pkg-config --cflags --libs glib-2.0 gobject-2.0` -o test.exe
2 Kommentare Hinterlasse einen Kommentar
1.
snf | 8. September 2010 um 10:24
hey. was ist denn das für ein vim theme?
grüße
2.
admin | 8. September 2010 um 12:20
Das ist nicht vim sondern gedit
Hinterlasse einen Kommentar
XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">
TrackBack URL | RSS Feed für Kommentare zu diesem Artikel.