Cross-Compiler — Änderungen 9787 → 9791

Zeile 15: Zeile 15:
  
 
== Bau eines Cross-Compilers ==
 
== Bau eines Cross-Compilers ==
−
Der Bau eines Cross-Compilers gestaltet sich recht einfach. Meistens gilt es, sich die aktuellen binutils und den gcc herunterzuladen. Die Befehle zum Übersetzen gleichen sich unter Linux und Windows/Cygwin.
+
Der Bau eines Cross-Compilers gestaltet sich recht einfach. Meistens gilt es, sich die aktuellen binutils und den gcc herunterzuladen. Die Befehle zum Übersetzen gleichen sich unter Linux und Windows(Cygwin, MinGW).
  
 
=== Linux ===
 
=== Linux ===
−
Unter Linux braucht man dazu [http://ftp.gnu.org/gnu/binutils/binutils-2.20.tar.gz dieses] Paket mit den binutils und [http://ftp.gnu.org/gnu/gcc/gcc-4.4.2/gcc-core-4.4.2.tar.bz2 dieses] Paket mit dem gcc. Will man Unterstützung für mehr Sprachen als C müssen weitere Pakete [http://ftp.gnu.org/gnu/gcc hier] heruntergeladen werden. Die einzelnen Sprachen müssen anschließend beim Konfigurieren angegeben werden, aber dazu später mehr.
 
−
 
 
Unter Linux kann es passieren, dass spätestens beim Konfigurieren vom gcc selbiges mit der Fehlermeldung abbricht, dass zwei Libraries nicht installiert seien: GMP und MPFR. Diese sind dann aus der Paketverwaltung der Distribution zu beziehen oder können [ftp://ftp.gmplib.org/pub/gmp-4.3.1/gmp-4.3.1.tar.bz2 hier] und [http://www.mpfr.org/mpfr-current/mpfr-2.4.1.tar.bz2 hier] heruntergeladen werden. Diese müssen nur entpackt und mit dem in Linux bekannten Dreisatz ''./configure, make, make install'' gebaut und installiert werden.
 
Unter Linux kann es passieren, dass spätestens beim Konfigurieren vom gcc selbiges mit der Fehlermeldung abbricht, dass zwei Libraries nicht installiert seien: GMP und MPFR. Diese sind dann aus der Paketverwaltung der Distribution zu beziehen oder können [ftp://ftp.gmplib.org/pub/gmp-4.3.1/gmp-4.3.1.tar.bz2 hier] und [http://www.mpfr.org/mpfr-current/mpfr-2.4.1.tar.bz2 hier] heruntergeladen werden. Diese müssen nur entpackt und mit dem in Linux bekannten Dreisatz ''./configure, make, make install'' gebaut und installiert werden.
  
Zeile 38: Zeile 36:
 
* Devel -> [[Netwide Assembler | nasm]]
 
* Devel -> [[Netwide Assembler | nasm]]
  
−
Ist Cygwin erfolgreich eingerichtet, können die binutils sowie der gcc entsprechend der Vorgehensweise unter Linux konfiguriert und kompiliert werden. Hierfür müssen ebenfalls die  [http://ftp.gnu.org/gnu/binutils/binutils-2.20.tar.gz binutils] und der [http://ftp.gnu.org/gnu/gcc/gcc-4.4.2/gcc-core-4.4.2.tar.bz2 gcc] heruntergeladen werden.
+
Ist Cygwin erfolgreich eingerichtet, können die binutils sowie der gcc entsprechend der Vorgehensweise unter Ablauf gebaut werden.
  
 
==== MinGW ====
 
==== MinGW ====
Zeile 45: Zeile 43:
  
 
=== Ablauf ===
 
=== Ablauf ===
−
Der Ablauf ist fast immer der gleiche: Die Pakete müssen ausgepackt und mit speziellen Parametern konfiguriert werden. Der Einfachheit halber sollte man dabei folgende Parameter setzen:
+
Der Ablauf ist immer der gleiche: Folgende Pakete müssen heruntergeladen werden
 +
[http://ftp.gnu.org/gnu/binutils/binutils-2.20.tar.bz2 Binutils] und
 +
[http://ftp.gnu.org/gnu/gcc/gcc-4.4.2/gcc-core-4.4.2.tar.bz2 gcc] und anschliesend mittels
 +
$ tar -xjf binutils-2.20.tar.bz2
 +
$ tar -xjf gcc-core-4.4.2.tar.bz2
 +
 
 +
ausgepackt werden. Wenn noch weitere Sprachen zusätzlich zu C unterstützt erden sollen, müssen die entsprechenden Pakete auch noch heruntergeladen werden beisppielsweise [http://ftp.gnu.org/gnu/gcc/gcc-4.4.2/gcc-g++-4.4.2.tar.bz2 dieses] Paket für C++. Danach müssen sie mit speziellen Parametern konfiguriert werden. Der Einfachheit halber sollte man dabei folgende Variablen setzen:
  
 
  $ export TARGET=ziel-plattform
 
  $ export TARGET=ziel-plattform
 
  $ export PREFIX=wo-die-crossutils-landen-sollen
 
  $ export PREFIX=wo-die-crossutils-landen-sollen
  
−
Dann reicht es, beim configure --target=$TARGET und --prefix=$PREFIX anzugeben. Auch ist es sinnvoll, die binutils und den gcc außerhalb ihrer entpackten Verzeichnisse zu bauen, also immer separate Verzeichnisse zu erstellen (gcc-ARCHITEKTUR und binutils-ARCHITEKTUR eignen sich beispielsweise hierfür ).
+
Dann reicht es, beim configure --target=$TARGET und --prefix=$PREFIX anzugeben. Auch ist es sinnvoll, die binutils und den gcc außerhalb ihrer entpackten Verzeichnisse zu bauen, also immer separate Verzeichnisse zu erstellen (gcc-ARCHITEKTUR und binutils-ARCHITEKTUR eignen sich beispielsweise hierfür ). Jetzt konfigureren wir die Pakete mit folgendne Befehlen(jeweils im entsprechendem separatem Verzeichniss(gcc-ARCHITEKTUR und binutils-ARCHITEKTUR) ausführen):
−
 
 
−
Beide Pakete (eventuell noch weitere, je nachdem ob weitere Sprachen gewünscht sind) werden dann mittels
 
−
 
 
−
$ tar -xjf paket.tar.endung
 
  
−
entpackt, wobei paket mit dem Namen des Pakets und endung mit der entsprechenden Endung zu ersetzen ist.
+
binutils:
 +
$ Pfad/zum/code/configure  --prefix=$PREFIX --with-sysroot=$PREFIX --target=$TARGET --disable-nls
  
 +
gcc:
 +
$ Pfad/zum/Code/configure --prefix=$PREFIX --target=$TARGET --disable-nls --enable-languages=c --disable-shared --disable-libssp
  
−
== Targets ==
+
für welche CPU Architektur der cross Compiler gebaut wird, wird mit dem target Parameter angegeben. Hier mal eine nicht vollständige Liste der wichtigsten Targets:
−
=== x86-64 ===
+
* ''x86_64-elf'' (um auf einem 32 Bit Porzessor/OS für ein 64Bit Prozessor/OS zu kompilieren. kann auch verwendet werden um sich einen cross compiler für Windows zu bauen.)
−
Wer einen 32-Bit-Prozessor (oder ein 32-Bit-Betriebssystem) verwendet und Code für 64-Bit-Prozessoren und Betriebssysteme schreiben will, muss sich wie folgt seine Umgebung aufsetzen:
+
* ''arm-unknown-linux-gnu'' (um für ARM Systeme Code zu kompilieren.)
  
−
$ export TARGET=x86_64-elf
+
Wenn weitere Sprachen unterstützt werden sollen und die entsrechenden Pakete heruntergeladen und entpackt wurden, dann müssen die Sprachen bei --enable-languages= aufgezählt werden. mit Komata getrennt.
−
$ export PREFIX=wo-die-crossutils-landen-sollen
+
Nachdem die Pakete nun konfiguriert wurden, müssen diese jeweils noch mit
−
 
 
−
Die binutils müssen dann entsprechend konfiguriert werden.
 
−
 
 
−
$ ../binutils-2.20.0/configure --target=$TARGET --prefix=$PREFIX
 
−
 
 
−
Nach erfolgreichem Konfigurieren können die binutils dann mittels
 
  
 
  $ make
 
  $ make
−
# make install
+
  $ make install
−
 
 
−
gebaut werden. Mit dem gcc wird analog verfahren: Er wird wie folgt konfiguriert.
 
−
 
 
−
$ ../gcc-4.4.2/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c
 
−
 
 
−
Will man Support für mehr Sprachen als C muss man diese entsprechend angeben, bsp:
 
−
 
 
−
$ ../gcc-4.4.2/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++,fortran
 
−
 
 
−
Falls, wie im [[Cross-Compiler#Linux|Linux-Abschnitt]] erwähnt, das Konfigurieren mit einer Fehlermeldung abbricht, müssen die entsprechenden Libraries (Bibliotheken) heruntergeladen, gebaut und installiert werden.
 
−
 
 
−
Nach erfolgreichem Konfigurieren reicht abschließend ein
 
−
 
 
−
  $ make all-gcc
 
−
# make install-gcc
 
−
 
 
−
zur Installation des gcc. Weitere Informationen zum Bau eines x86-64-Cross-Compilers findet man [[X86-64_Cross-Compiler|hier]].
 
−
 
 
−
=== ARM ===
 
−
Wer einen x86-Prozessor verwendet, um Code für die ARM-Architektur zu entwickeln, verfährt analog. Einzig das Target muss geändert werden:
 
−
 
 
−
$ export TARGET=arm-unknown-linux-gnu
 
−
 
 
−
Dann verfährt man gleichartig wie beim Bau eines x86-64-Cross-Compilers. Einen ausführlicheren Artikel dazu und weitere Informationen finden sich [[ARM_Cross-Compiler|hier]].
 
−
 
 
−
 
 
−
=== ELF ===
 
−
Windows unterstützt nativ kein [[ELF]]-Format. Hier kann man sich leicht Abhilfe schaffen, in dem man den eigens von [[Benutzer:Jidder|Jidder]] erstellten Cross-Compiler herunterlädt und sich seine Umgebung dementsprechend konfiguriert. Mehr Informationen dazu [[Crosscompiler_für_Windows|hier]].
 
  
 +
gebaut und installiert werden.
  
 
== Siehe auch ==
 
== Siehe auch ==