Hi, ich wunder mich nun schon seit einiger zeit über einen Linker Error >>[Linker error] undefined reference to `testme(char)' zu den quellcode >>extern void testme(char c); >>int main(void) >>{ >> testme('L'); >> return 0; >>} und der externen asm file s.S >>.global testme >>.func testme >>testme: >>mov r16,r24 >>ret >>.endfunc >>.end (eingebunden in ASRC=s.S der Makefile) mit avr-nm bekam ich >> U __do_clear_bss >> U __do_copy_data >>0000003e a __SP_H__ >>0000003d a __SP_L__ >>0000003f a __SREG__ >>00000000 a __tmp_reg__ >>00000001 a __zero_reg__ >> U _Z6testmec >>00000000 T main und sah mit erstaunen das der compiler mir aus der funktion testme die funktion >_Z6testmec macht. Als ich die s.S dementsprechend änderte war alles schön und supi. nun möchte ich aber das die C funktion beim compilieren ihren namen behält, und ich weiß leider nicht wie ich das anstelle. Danke für eure Aufmerksamkeit.
> und sah mit erstaunen
Das ist nicht ungewöhnlich und nennt sich 'Name-mangling'.
Das Problem tritt immer dann auf, wenn dein System (compiler
+linker) auch Sprachen wie C++ unterstützt, in der 2 Funktionen
den gleichen Namen haben dürfen solange sie sich in der
Argumentliste unterscheiden.
Da bleibt dann dem System nichts anderes übrig als den
Funktionsnamen mit den Datentypen in der Argumentliste zu
dekorieren um zumindest intern eine Unterscheidung zu erhalten.
Aber du kannst mal versuchen ob
extern "C" void testme(char c);
das Problem löst.
Danke für deine Antwort,.. die Variante mit extern "c".. funktioniert,.. Es gibt auch noch eine möglichkeit,..(habe ganz schön lang gesucht) >>(siehe http://developer.apple.com/documentation/developertools/gcc-4.0.1/gcc/Asm-Labels.html#Asm-Labels) >extern void testme(char c) asm ("testme"); funktioniert auch,.. grüüüße und dank der kai
Warum ist das denn ein Problem, wenn der Compiler den Namen ändert?
Der Compiler betrachet in schönster Unix-Konvention Dateien, die auf ".C" enden, als C++-Quellen. Wenn's C sein soll, dann ist ".c" besser.
@Regler
>Warum ist das denn ein Problem, wenn der Compiler den Namen ändert?
siehe Originalposting
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.