seltsamer Fehler
-
Hallo zusammen,
ich habe gerade einen Fehler, verstehe aber nicht, warum. Normalerweise programmiere ich auch mehr Java als C, darum kann es sein, dass ich etwas ganz triviales nicht weiß. Also, beim Übersetzen kommt folgender Fehler:... uml_kern.c: undefined reference to `_strcpy´
Das eigenartige ist, dass der Fehler gar nicht dort liegt. Dort ist nur die Funktion strcpy definiert:
#ifdef USER_CFG_USE_strcpy
char * strcpy (char *pdest, XCONST char *psource)
{
.
.
.
}
#endif /* USER_CFG_USE_strcpy */Der Fehler taucht in einer anderen Klasse auf, und zwar in dieser Zeile:
(void)strcpy(*(SDL_Charstring *)yVar, *(SDL_Charstring *)yExpr);
Wenn ich die auskommentiere, kommt der Fehler nicht mehr.
Die Funktion strcpy wird noch an anderer Stelle aufgerufen, da klappt es problemlos:(void)strcpy(Result, C2);
wobei Result und C2 vom Typ SDL_Charstring sind. Damit hat das aber offensichtlich nichts zu tun, denn wenn ich an der Fehlerstelle die Funktion mit genau solchen Typen übergab, kam dieselbe Fehlermeldung. Auch wenn ich einen char* bzw. konstanten char* definierte. Vorweg: Ich habe den Code nicht erstellt, ich muss jetzt aber damit arbeiten. Was mich vor allem verwundert ist, dass der Fehler nicht dort angezeigt wird, wo er tatsächlich verursacht wird. Hat jemand eine Ahnung?
Gruß,
LukeSkywalker
-
Wo ist denn das define für USER_CFG_USE_strcpy gesetzt?
Ohne dieses define wird auch die Funktion nicht definiert und kann auch entsprechend nicht ausgeführt werden.
-
ou oups ...
ich habe versehentlich ihre Frage nicht richtig gelesen, darum die Antwort editiert. Ich muss eingestehen, dass ich kein define finden kann, nicht jedenfalls in dieser Datei.
Vielen Dank für den Hinweis.
GRuß,
LukeSkywalker
-
Hallo Herr Schmidtke,
ich muss eingestehen, dass ich zuvor noch nie mit #ifdef und so gearbeitet habe. Darum meine Frage: Das muss doch auch in der entsprechenden Klasse geschehen, oder?
Und: Die Funktion wird ja von wo anders auch aufgerufen, da gibt es keine Fehlermeldung.
Gruß,
LukeSkywalker
-
Das die Funktion an anderer Stelle funktioniert, habe ich auch erst beim zweiten Lesen gesehen.
Mit der define-Anweisung wird gesteuert, ob der Compiler die Funktion einbindet oder nicht. Nun kann es durchaus sein, das die define-Anweisung wegen einer fehlenden Header-Datei an der einen Stelle gesetzt ist, an der anderen jedoch nicht.
Geben Sie einfach mal den folgenden Code irgendwo am Anfang der CPP-Datei (nach den includes) ein, in welcher der Fehler auftritt.
#ifdef USER_CFG_USE_strcpy ??? #endif
Wenn der Compiler die Fragezeichen anmeckert, dann ist das define gesetzt und der Fehler liegt irgendwo anders.
Meckert er nicht, ist die define-Anweisung zum Zeitpunkt der Kompilierung nicht gesetzt. Suchen Sie nach einer Headerdatei mit der Anweisung
#define USER_CFG_USE_strcpy