gcc mit wiederholendem, unsinigen fehler

bsdagent

Auch im #bsdforen.de Chat
hallo

ich hab da ein problem mit meinem gcc compiler (freebsd 5.4 release). schreib ich ein programm wie:
#include <stdio.h>

using namespace std;

int main(void){
return 0;
}

compiliere: gcc main.c -o application

funktioniert alles, doch wende ich gewiesse funktionen wie "getchar()" an:

#include <stdio.h>

using namespace std;

int main(void){
getchar();
return 0;
}

compiliere: gcc main.c -o application
kommt ein komischer fehler: /var/tmp//ccIaB2Wu.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'

und ich bin auf den gcc angewiesen, da ich einiege c89 programme in c++ umschreiben möchte.
hatte das problem auch mit älteren versionen von freebsd, dachte aber es würde sich mit der neuen version beheben, leder ist das nicht geschehen.
 
Das ist ja auch falsch. Entweder du uebersetzt C++ Code mit einem C++-Compiler oder C Code mit einem C-Compiler. Jedenfalls wirst du Schwierigkeiten haben, einem C Compiler dein kaputtes C++ da zu verkaufen. :D
 
c code sollte aber auch unter c++ laufen, was hab ich den für falsche parameter verwendet, um jetzt meine quelldatei zu compilieren?
 
bsdagent schrieb:
c code sollte aber auch unter c++ laufen, was hab ich den für falsche parameter verwendet, um jetzt meine quelldatei zu compilieren?

Falscher Header, falscher Compileraufruf ;-)

Code:
#include <iostream>

using namespace std;

int main(void)
{
        getchar();
        return 0;
}

g++ main.c -o application

CU

Martin
 
bsdagent schrieb:
c code sollte aber auch unter c++ laufen, was hab ich den für falsche parameter verwendet, um jetzt meine quelldatei zu compilieren?
Das ändert aber nichts daran, daß es sich bei C und C++ um zwei konzeptuell wie technisch völlig verschiedene Sprachen handelt. Man sollte sie deshalb nicht mischen. Allein deshalb, weil C++ viel strenger ist, was Dinge wie Typisierung angeht.

Gruß,
/dev
 
bsdagent schrieb:
c code sollte aber auch unter c++ laufen, was hab ich den für falsche parameter verwendet, um jetzt meine quelldatei zu compilieren?
Ja, aber du versuchst C++-Code in C zu verwenden, da du "gcc" und nicht "g++" schreibst.
Abgesehen von der falschen header-datei. ;)
Du hast wohl folgenden Satz überlesen.
MrFixit schrieb:
Jedenfalls wirst du Schwierigkeiten haben, einem C Compiler dein kaputtes C++ da zu verkaufen.

MfG
 
Der gcc 3.4.4 von FreeBSD 6.0 kommt übrigens nicht mit der Fehlermeldung undefined reference, sondern versucht wegen der Dateiendung ".c" gar nicht erst diesen Quelltext als C++ zu interpretieren und beklagt sich vielmehr darüber, dass er das Schlüsselwort using nicht kennt. Das finde ich wesentlich aufschlußreicher und sinnvoller. :-)

Björn
 
Tatsache, gcc meint besonder schlau zu sein, und faellt dabei grandios auf die Schnauze:

foo.c siehe OP
Code:
% cc foo.c
foo.c:3: error: syntax error before "namespace"
foo.c:3: warning: type defaults to `int' in declaration of `std'
foo.c:3: error: ISO C forbids data definition with no type or storage class
(1)% c++ foo.c
% ln foo.c foo.cc
% cc foo.cc
/var/tmp//ccYjm2CN.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
(1)% c++ foo.cc
%
 
[LoN]Kamikaze schrieb:
Außerdem sollten c++ files mit .C oder .cpp enden.
Aus der Manpage von gcc/g++:
Code:
       .c    C source; preprocess, compile, assemble
       .C    C++ source; preprocess, compile, assemble
       .cc   C++ source; preprocess, compile, assemble
       .cxx  C++ source; preprocess, compile, assemble
Ich kenne .cpp eigentlich nur von Visual C++.

Björn
 
also bei dev-C++ (eine Windows IDE) werden die auch immer .cpp genannt. aber verwendet VC++ nciht cxx? Naja, ich finde bei cpp erkennt man am besten worum es sich handelt...
 
Keine Ahnung um ehrlich zu sein. Ich sehe cpp bei vielen Ports und betrachte es als gewachsenen Standard.
 
Zurück
Oben