X86-64 Cross-Compiler
Löschhinweis:
Dieser Artikel wurde zum Löschen vorgeschlagen.
Bereits im Artikel Cross-Compiler vorhanden --Mtgxyz - Diskussion 17:53, 29. Jan. 2016 (CET)
Wer ein 64-Bit-Betriebssystem entwickeln möchte, allerdings kein 64-Bit-Linux installiert hat, muss sich einen Cross-Compiler bauen, damit dieser 64-Bit-Dateien erstellen kann.
Im Folgenden wird erklärt, wie man einen Cross-Compiler für die x86-64-Plattform unter einem 32-Bit-Linux erstellt.
Inhaltsverzeichnis
Vorbereitung
Es gibt zwei verschiedene Wege, einen Cross-Compiler für x86-64 zu erstellen, wir bedienen uns hier der einfachsten Variante: Wir bauen die Binutils und den GCC neu, sodass wir einen funktionierenden gcc haben, mit dessen Hilfe wir x86-64-ELF-Dateien erstellen können.
Als erstes müssen dazu die Binutils und der gcc heruntergeladen werden. Wir benutzen dazu die neueste (Stand: 17. Juni 2011) Version beider Toolchains, einmal die binutils 2.21.0 und das Core-Package des gcc 4.6.0. Wenn allerdings auch Support für mehr Sprachen als C gewünscht ist, müssen dementsprechend zusätzliche Pakete unter ftp.gnu.org/gnu/gcc heruntergeladen werden.
Diese werden nun in ein beliebiges Verzeichnis entpackt, wir verwenden hier die Verzeichnisse /usr/src/cross-gcc und /usr/src/cross-binutils. Desweiteren sollte auch ein Verzeichnis für die Cross-Tools angelegt werden, in unserem Beispiel landen die fertigen Tools unter /usr/cross.
Falls man sich noch nicht auf der Shell befindet, sollte man jetzt zu selbiger wechseln.
Anschließend werden ein paar Variablen gesetzt:
$ export PREFIX=/usr/cross $ export TARGET=x86_64-elf
PREFIX kann mit dem Verzeichnis ersetzt werden, wo die Tools später landen sollen.
Nun kann es schon losgehen!
binutils erstellen
Wir erstellen nun die binutils. Das ist einfacher als gedacht, handelt es sich doch auch hier um den typischen Dreisatz:
configure make all make install
Ins binutils-Verzeichnis gewechselt, geben wir configure ein paar Parameter mit auf dem Weg:
$ ./configure --target=$TARGET --prefix=$PREFIX
Wie man sieht, konfigurieren wir die Binutils für unser Zielsystem. Nach erfolgreichem configure kann nun gebaut werden:
$ make all # make install
Die binutils wurden dann erfolgreich gebaut. Jetzt geht's weiter zum gcc.
gcc bauen
Halt, da fehlt noch was
Um den gcc zu bauen, benötigt es zwei (sofern nicht bereits installiert) Bibliotheken: Die GMP und MPFR-Libraries. Diese können durch die Paketverwaltung bezogen werden oder müssen gegenebenfalls runtergeladen und von Hand gebaut werden.
Hierbei ist zu beachten, erst GMP zu bauen und zu installieren und dann MPFR zu bauen und zu installieren (und dann MPC). Gebaut werden beide Libraries mit dem bekannten Dreisatz ./configure, make, (sudo) make install.
Jetzt aber
Nun bauen wir also den gcc. Dazu sind erst kurze Vorbereitungen nötig:
$ export PATH=$PATH:$PREFIX/bin
Damit wird der Ort der Cross-binutils zum PATH hinzugefügt.
Jetzt wird gcc konfiguriert:
$ ./configure --target=$TARGET --prefix=$PREFIX --enable-languages=c --without-headers
Sollte einer der benötigten Tools oder Librarys (bison, flex, GMP, MPFR) fehlen, meckert configure entsprechend. Nach erfolgreichem configure kann nun der gcc per
make all-gcc make install-gcc
gebaut und installiert werden. Das Bauen des gcc dauert unter Umständen sehr lange (sind halt ein paar MB Sourcecode).
Fertig!
Gratulation, ein Cross-Compiler für die x86-64-Plattform wurde erstellt! Die Tools befinden sich nun unter /usr/cross/ (in diesem Beispiel) und haben x86_64-elf- als Prefix, Beispiel: x86_64-elf-gcc, x86_64-elf-ld usw.