Hallo, ich habe in meinem Startup-Code (LPC2000) ein Problem. Und zwar möchte ich, bevor ich main aufrufe, eine andere Funtion starten, die dummerweise in C++ realisiert ist. Im Startupcode gibts ja die Anweisungen ldr r12, =main mov lr, pc bx r12 nun möchte ich, bevor ich main aufrufe, eine andere Funktion starten namens init. Wenn ich folgendes schreibe: ldr r12, =init mov lr, pc bx r12 dann funktioniert dies zwar, völlig zuverlässig, aber nur, wenn init eine C-Funktion ist. Sobald ich init in einem cpp-File habe (und das habe ich, weil init auf bestimmte C++ Klassen zugreifen muss), dann meckert der Compiler (undefinied symbol). Was muss ich tun, damit er erkennt, was init ist? In C geht das ja auch. Gruss
Rauskriegen wie die Funktion heisst und diese aufrufen. Eine C++ Funktion void init() heisst auf Assembler-Ebene nicht einfach nur init, weil Parametertypen in den Namen reincodiert sind. Alternativ: Diese Funktion mit extern "C" garnieren.
A.K., danke erstmal. Wie finde ich den Namen der Funktion denn raus? Und, wenn ich sie mit extern "C" garniere - kann sie dann dennoch C++ Code ausführen?
Name: beispielsweise ins Mapfile reinsehen. Kann dennoch C++ ausführen.
@guenther Für Interessierte :) Wie musstest du die Funktion denn nun aufrufen?
Interessierte schrieb: > @guenther > > Für Interessierte :) > > Wie musstest du die Funktion denn nun aufrufen? Na genau so, wie im ersten Post. Er hat mit dem 'extern "C"' nur dafür gesorgt, dass die Funktion auch tatsächlich "init" heißt.
Ja, genau so habe ich es gemacht. Mein Startup-Code lädt erst die Adresse der init-Funktion, so: ldr r12, =init mov lr, pc bx r12 und dann erst wird main gestartet: ldr r12, =main mov lr, pc bx r12 wobei die funktion init so aussieht: extern "C" void init(void) { ... } Gruss
Hi und ohne das extern "C" heißt die Funktion dann (bei einem 3.4.4 x86 gcc) __Z4initv. Stichwort "Name mangling". Matthias
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.