PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unklare Compilermeldung



BloodyBullet
12-11-2004, 15:06
Hallo,

ich bin ein wenig über eine Compilermeldung verwundert, wenn ich versuche ein Programm zu kompilieren.
Das ist die Fehlermeldung:
/tmp/ccSH92FN.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
Das ist der Code:

#include <stdio.h>

int main()
{
char i='-';
int v;
{
for (v=0; v>20; v=v++)
printf("%c",i);
}
return 0;
}

Weiß jemand mehr?

MfG

Boron
12-11-2004, 15:26
Wenn du die Schleife 20 mal durchlaufen lassen willst, dann muss sie so aussehen:
for( v=0; v<20; v++)
{
printf( "%c",i);
}Das wird wahrscheinlich den Fehler des Linkers nicht lösen.
Aber die Schleife ist dann zumindest richtig.

BloodyBullet
12-11-2004, 15:53
Wenn du die Schleife 20 mal durchlaufen lassen willst, dann muss sie so aussehen:
for( v=0; v<20; v++)
{
printf( "%c",i);
}Das wird wahrscheinlich den Fehler des Linkers nicht lösen.
Aber die Schleife ist dann zumindest richtig.
Das Problem löst es nicht, zumindest aber hast du recht; ich habe einen Tippfehler (>, statt <) gehabt.

Hat wer eine Lösung zum Problem?

MfG

wraith
12-11-2004, 16:06
Hat deine Datei eine C Endung (*.c), wenn du mit gcc kompilierst?

locus vivendi
12-11-2004, 16:32
wraith formuliert es als Frage, aber man kann sich nahezu sicher sein: Die Datei hat nicht eine Dateiendung für C Programme und der OP hat nicht "g++" oder "c++" angeworfen.

Joghurt
12-11-2004, 16:37
Dabei darf man nicht vergessen, dass Unix Dateisystem case-sensitive sind, und - unpraktischerweise - *.c für C-Programme, und *.C für C++-Programme steht

panzi
12-11-2004, 19:01
Zeig mal dei commandoline mit der du kompelierst.

peschmae
12-11-2004, 19:37
wraith formuliert es als Frage, aber man kann sich nahezu sicher sein: Die Datei hat nicht eine Dateiendung für C Programme und der OP hat nicht "g++" oder "c++" angeworfen.

Das macht aber hier nicht wirklich einen Unterschied - das Programm geht ja sowohl als C++ als als auch C d.h. mit gcc und g++
Ausserdem wäre die Fehlermeldung bei falscher Dateiendung etwas hilfreicher:


file not recognized: File format not recognized
collect2: ld gab 1 als Ende-Status zurück


Ich schaff es auf jeden Fall nicht das Programm zum nicht-funktionieren zu bringen.

MfG Peschmä

locus vivendi
13-11-2004, 11:07
Zitat:


Zitat von locus vivendi

wraith formuliert es als Frage, aber man kann sich nahezu sicher sein: Die Datei hat nicht eine Dateiendung für C Programme und der OP hat nicht "g++" oder "c++" angeworfen.

Das macht aber hier nicht wirklich einen Unterschied - das Programm geht ja sowohl als C++ als als auch C d.h. mit gcc und g++
Doch. Wenn der gcc ein C++ Programm übersetzt (ausser bei sehr einfachen Programmen), dann legt er in der zugehörigen Objektdatei ein undefiniertes Symbol namens "gxx_personality_v0" an. Um ein komplettes, lauffähiges Programm zu erzeugen muss deshalb die libstdc++ gelinkt werden, welche "gxx_personality_v0" definiert.
Ein weiteres Indiz für den Sachverhalt den wraith vermutete ist auch die Erwähnung der eh_frame Section in der Fehlermeldung. Diese Section ist für Exception Handling wichtig. Sie wird vom gcc aber nicht angelegt, wenn ein C Programm übersetzt wird.


Ich schaff es auf jeden Fall nicht das Programm zum nicht-funktionieren zu bringen.
Ist ganz einfach. Speicher den gezeigten Code in einer Datei die auf z.B. "cpp" endet und übersetze folgendermassen: "gcc <name>.cpp"

peschmae
13-11-2004, 16:01
Ach so geht das. Stimmt.

MfG Peschmä