# GCC als Cross-Compiler



## Aiju (21. Januar 2006)

Wie kann ich mit der GCC unter Linux Windows binaries erzeugen?
Ich habe bei google haufenweise Erklärungen gefunden, mit denen komme ich jedoch nicht klar. Also : Welche Tarballs muss ich runterladen?


----------



## imweasel (22. Januar 2006)

Hi,

eine relativ gute Anleitung zum erstellen von Windowsbinarys kannst du in englisch hier finden.


----------



## Aiju (22. Januar 2006)

Ich habe doch nur den gcc für das Target x86 Linux installiert. Wie installiere ich den unter SuSE 10 den gcc für x86 Linux -> Windows?


----------



## RedWing (22. Januar 2006)

Hallo,

http://www.mingw.org/MinGWiki/index.php/build a Win32 x-compiler for Linux

Gruß

RedWing


----------



## imweasel (22. Januar 2006)

Aiju hat gesagt.:
			
		

> Ich habe doch nur den gcc für das Target x86 Linux installiert. Wie installiere ich den unter SuSE 10 den gcc für x86 Linux -> Windows?



Hi,

wie du das genau unter SuSE machst hab ich keine Ahnung  schau mal nach ob du mit Yast das Paket *mingw32* installieren kannst.

Notfalls kannst du dir auch die Sourcen von der MinGW Homepage besorgen.


----------



## Aiju (22. Januar 2006)

Das Paket mingw32 gibt es nicht. Die binutils habe ich installiert, kompiliere gerade gcc-core
EDIT: fehlgeschlagen!
Er findet stdio.h nicht...
Ich habs so gemacht, ich habe ein mingw Verzeichnis angelegt. Dort dann gcc-core enpackt und ein Verzeichnis build erstellt. Dann hab ich dort rein cd'et und das Skript ausgeführt:

```
#!/bin/sh
../gcc-3.4.2-20040916-1/configure --with-gcc --target=mingw32  --prefix=/mingw --enable-threads --disable-nls --enable-languages=c --disable-win32-registry --disable-shared --enable-sjlj-exceptions --without-x --enable-hash-synchronization --enable-libstdcxx-debug
make CFLAGS="-O2 -fomit-frame-pointer" CXXFLAGS="-mthreads -fno-omit-frame-pointer -O2" LDFLAGS=-s 
cd gcc
make CFLAGS=-O2 LDFLAGS=-s LN_S=ln gnatlib_and_tools
```


----------



## RedWing (22. Januar 2006)

Hallo,

zeig mal den "top most build error"...

Gruß

RedWing


----------



## Aiju (22. Januar 2006)

was ist denn der "top most build error" ?

```
make[1]: Entering directory `/home/aiju/software/tmp/mingw/build/libiberty'
make[2]: Entering directory `/home/aiju/software/tmp/mingw/build/libiberty/testsuite'
make[2]: Für das Ziel »all« ist nichts zu tun.
make[2]: Leaving directory `/home/aiju/software/tmp/mingw/build/libiberty/testsuite'
make[1]: Leaving directory `/home/aiju/software/tmp/mingw/build/libiberty'
make[1]: Entering directory `/home/aiju/software/tmp/mingw/build/intl'
make[1]: Für das Ziel »all« ist nichts zu tun.
make[1]: Leaving directory `/home/aiju/software/tmp/mingw/build/intl'
make[1]: Entering directory `/home/aiju/software/tmp/mingw/build/gcc'
/home/aiju/software/tmp/mingw/build/gcc/xgcc -B/home/aiju/software/tmp/mingw/build/gcc/ -B/mingw/mingw32/bin/ -B/mingw/mingw32/lib/ -isystem /mingw/mingw32/include -isystem /mingw/mingw32/sys-include -O2 -DIN_GCC -DCROSS_COMPILE   -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include  -I. -I. -I../../gcc-3.4.2-20040916-1/gcc -I../../gcc-3.4.2-20040916-1/gcc/. -I../../gcc-3.4.2-20040916-1/gcc/../include   -g0 -finhibit-size-directive -fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss -fno-unit-at-a-time -fno-omit-frame-pointer \
  -Dinhibit_libc -c ../../gcc-3.4.2-20040916-1/gcc/crtstuff.c -DCRT_BEGIN \
  -o crtbegin.o
In file included from ./tm.h:10,
                 from ../../gcc-3.4.2-20040916-1/gcc/crtstuff.c:64:
../../gcc-3.4.2-20040916-1/gcc/config/i386/cygming.h:53:19: stdio.h: No such file or directory
In file included from ./tm.h:10,
                 from ../../gcc-3.4.2-20040916-1/gcc/crtstuff.c:64:
../../gcc-3.4.2-20040916-1/gcc/config/i386/cygming.h:358: error: syntax error before '*' token
../../gcc-3.4.2-20040916-1/gcc/config/i386/cygming.h:358: warning: function declaration isn't a prototype
make[1]: *** [crtbegin.o] Fehler 1
make[1]: Leaving directory `/home/aiju/software/tmp/mingw/build/gcc'
make: *** [all-gcc] Fehler 2
```


----------



## RedWing (22. Januar 2006)

Top most build error = am weitest oben stehender Fehler
Aber glibc-dev hast du auf deinem Rechner schon installiert?
Kann nur raten das dir die C Headers Fehlen bzw diese nicht in /usr/include liegen?

Gruß

RedWing


----------



## Aiju (22. Januar 2006)

Doch die liegen dort, ich habe ja auch schon andere Programme kompiliert. Doch der Compiler scheint sich auch selbst zu kompilieren.


----------



## RedWing (22. Januar 2006)

Aiju hat gesagt.:
			
		

> Doch die liegen dort, ich habe ja auch schon andere Programme kompiliert. Doch der Compiler scheint sich auch selbst zu kompilieren.



Mhm.

Hast du die Variablen im Skript angepasst?



> Get this shell-Script, adjust at least BUILD_ROOT and PREFIX at the top of the script to match your setup. If you wish to build other compilers than gcc and g++ like e.g. g77 or gnat you'll search for the lang_* settings a bit further down in the script and adjust them to your needs. Now save and run the script. You now may go and get some coffee, tea or whatever you prefer because this will take some time.



Gruß

RedWing


----------



## Aiju (22. Januar 2006)

Das Skript habe ich ja nicht genommen.
Ich habe jetzt mal ein Verzeichnis /mingw/mingw32/include erstellt und dort alle Includes reinge-symlink-t (mit cp -s)
Jetzt kommen die Meldungen:

```
/tmp/ccAb1EsN.s: Assembler messages:
/tmp/ccAb1EsN.s:5: Error: unknown pseudo-op: `.def'
/tmp/ccAb1EsN.s:5: Error: unknown pseudo-op: `.scl'
/tmp/ccAb1EsN.s:5: Error: unrecognized symbol type ""
/tmp/ccAb1EsN.s:5: Error: junk at end of line, first unrecognized character is `3'
/tmp/ccAb1EsN.s:5: Error: unknown pseudo-op: `.endef'
/tmp/ccAb1EsN.s:11: Error: unknown pseudo-op: `.def'
/tmp/ccAb1EsN.s:11: Error: unknown pseudo-op: `.scl'
/tmp/ccAb1EsN.s:11: Error: unrecognized symbol type ""
/tmp/ccAb1EsN.s:11: Error: junk at end of line, first unrecognized character is `3'
/tmp/ccAb1EsN.s:11: Error: unknown pseudo-op: `.endef'
```


----------



## RedWing (22. Januar 2006)

btw.


> Doch der Compiler scheint sich auch selbst zu kompilieren.



das kann ich mir nicht vorstellen. Ansonsten hättest du dann ein Compiler der 
auf ner Windows Plattform läuft...
Es kann aber gut sein das die eignen Header verwendet werden.

Gruß

RedWing


----------



## RedWing (22. Januar 2006)

> Das Skript habe ich ja nicht genommen.


Gibt es einen Grund dfaür?

Ich glaube die haben das Skript nicht für umsonst geschrieben...

Gruß

RedWing


----------



## Aiju (22. Januar 2006)

Ich habe die Binutils für win schon vorher installiert.
EDIT: Noch mal von vorn:
build-Dir geleert. configure mit den Optionen
--target=mingw32 --build=i586-pc-linux-gnu --host=i586-pc-linux-gnu
gestartet. make ohne Optionen.


----------



## thooomy (23. Januar 2006)

gilt nicht jetzt speziell für deine frage - aber für cross-compiler allg. seeehr hilfreich:
http://kegel.com/crosstool/


----------

