Hallo,
ich habe es nach langen Wirrungen zu einem selbstkompiliertem
Crosscompiler unter Linux für meinen LPC2148 (ARM) gebracht. Newlib habe
ich zwar für die von GCC benötigten Header verwendet, nicht jedoch
kompiliert, da es mit dem Support für den LPC2000 doch recht mau
aussieht: Es gibt zwar "newlib-lpc" in der Version 5a aber eigentlich
brauche ich nicht einmal Sache wie open(), da ich sowieso kein
Dateisystem habe. Bei C bin ich bisher mit der Option -nostdlib recht
gut gefahren. Bei C++ meckert der Linker aber sobald ich Klassen oder
gar virtuelle Funktionen verwende. libstdc++ will ich auch nicht
verwenden, Sachen wie Streams belegen nur unnötig kostbarern
Flashspeicher. Brauche ich die etwa für Polymorphie? Fehlt meinem
Linkerscript vielleicht eine Sektion? Gelinkt werden bei mir: .text,
.rodata, .rodata*, .glue_7, .glue_7t, .data, .bss. Ich habe schon
Linkerscripts mit viel mehr Sektionen gesehen, aber mit C hat bisher
alles geklappt (nur eben nicht libc, weil nicht vorhanden).
Ich habe auch schon -fno-rtti -fno-exceptions eingeschaltet und
virtuelle Funktionen weggelassen (obwohl die und wenns hochkommt
Exceptions ganz nett wären) und meine eigene abort()-Funktion
geschrieben (Endlosschleife g), dann will der Linker immernoch
"__gxx_personality_sj0" haben. Ich verwende auch eine eigene crt0.s, die
war auf der CD von Olimex drauf, die mit meinem Board kam.
Ich würde mich freuen, wenn mir jemand sagen könnte, wie man C++ mit der
GCC ohne eine funktionsfähige libc verwenden kann oder ob das schlicht
unmöglich ist.
Schöne Grüße,
Lukas Winter