Hallo, ich bin auf der Suche nach Aufklärung zum Thema GCC für diverse uC Targets. Das soll sich hier als Diskussionsrunde verstanden werden. Ich kenne den GCC vor allem als Compiler für den PC. Nun gibt es aber spezielle GCC "Versionen" für z.B- ARM, AVR, Freescale MCUs, .. Wie kann ich das in meinem Kopf sortieren ? Könnte ich meinen in debian eingebundenen gcc mit einer langen Parameterliste dazu bringen ein Programm für einen uC zu erzeugen oder geht das gar nicht? (Und vll. noch wieso nicht?) Die Zielarchitektur ist ja zumindest als Parameter beim gcc-Aufruf wählbar.... Dann gibt es viele Anleitungen den gcc (als Compiler) für diverse targets zu compilieren. Geht das mit dem reinen GCC Sourcen? Oder ist das ein eigenständiger Quellcode ? ( Was hat das dann mit dem GCC zu tun?) Das vielleicht erstmal als Einstieg... ich hoffe ihr könnt mir helfen die Fragezeichen aus meinem Kopf zu bekommen. Schönes Wochenende Tom
> gcc mit einer langen > Parameterliste dazu bringen ein Programm für einen uC zu erzeugen Das geht so einfach nicht, gcc erzeugt nur code für "seine" Architektur. Die gibt man beim Kompilieren des gcc an. > Die Zielarchitektur ist ja zumindest als Parameter beim gcc-Aufruf > wählbar.... Man kann nur eine Variante der Architektur wählen; bei X86 also z.B. zwischen i386, i486 oder einer 64-Bit Variante. Bei den ARM (Cross-) Compiler Versionen kann man so z.B. zwischen ARMv6 und ARMv7-M auswählen. Aber ein gcc für X86 Target kann keinen ARM Code erzeugen. Man sollte bedenken, dass der GCC als Frontend einfach nur Assembler ausspuckt - und dann gleich den AS aus Binutils aufruft um das Objektfile zu erzeugen. > [...]verschiedene targets [...] Geht das mit dem reinen GCC Sourcen? Ja. Use the Source, Luke. Ist aber etwas komplizierter, weil man eben noch passende Binutils und C-Lib braucht.
Tom schrieb: > Die Zielarchitektur ist ja zumindest als Parameter beim gcc-Aufruf > wählbar. Nein, sie wird durch die --target-Option beim configure festgelegt. Wenn --host und --target verschiedene Architekturen beschreiben, dann spricht man von einem Cross-Compiler.
Ich widerspreche ja nur ungern ... tu's aber doch! Ich habe unter Linux einen gcc-4.4.3 (x86_64) und den avr-gcc-4.3.4 installiert. Mit diesem Aufruf:
1 | gcc -b avr -V 4.3.4 -c x.c |
kompiliert der gcc schön brav für den AVR.
1 | file x.o |
2 | x.o: ELF 32-bit LSB relocatable, Atmel AVR 8-bit, version 1 (SYSV), not stripped |
Erwartungsgemäß liefert der gcc standardmäßig x86-Code:
1 | gcc -c x.c |
2 | file x.o |
3 | x.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped |
Das liegt daran, dass sich "gcc" anhand der Optionen aussucht, für welche MACHINE bzw. VERSION er kompiliert.
Konrad S. schrieb: > Das liegt daran, dass sich "gcc" anhand der Optionen aussucht, für > welche MACHINE bzw. VERSION er kompiliert. Diese Option kannte ich auch noch, funktioniert aber wohl mit neueren GCCs (ich hab 4.6.1) nicht mehr. Letztendlich muß man aber trotzdem den kompletten GCC für jede Zielplattform installiert haben. Die von dir genannte Kommandozeile macht eigentlich nichts weiter als aus übergebener Zielplatform und -version einen Aufruf für den eigentlichen Compiler zu basteln, an den das dann einfach weitergereicht wird. Dein Konrad S. schrieb: > gcc -b avr -V 4.3.4 -c x.c ist äquivalent zu:
1 | avr-gcc-4.3.4 -c x.c |
Rolf Magnus schrieb: > Diese Option kannte ich auch noch, funktioniert aber wohl mit neueren > GCCs (ich hab 4.6.1) nicht mehr. Ist wohl beim gcc-4.5.4 letztmalig dokumentiert. Naja, der Verlust hält sich in Grenzen. ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.