C++ Programmieren, Problem mit main

Gast #2617694
Hi,
und zwar möchte ich mit dem AVRSTudio C++ programmieren. Wie ich jetzt 
beim Durchstöbern herausgefunden habe, erreiche ich dies, indem ich die 
Dateien in .cpp umbenenne.
Jetzt habe ich allerdings das Problem, wenn ich die main.c in main.cpp 
umbenenne, dass er sie nicht mehr findet und folgende Fehlermeldung 
""gcrt1.S:52: undefined reference to `main'"" erscheint. Benenne ich sie 
um, findet er sie zwar wieder, aber kann natürlich mit dem C++ Code nix 
anfangen.

Habt Ihr da vlt. eine Idee.

lg Steff
Gast #2617896
???

Ob du deine Datei main.cpp oder mueller.cpp nennst, sit völlig egal. 
Wichtig ist nur, daß es da drin eine Funtion main() gibt. Und wenn der 
Compiler die compiliert, dann funktioniert das auch mit C++.

Das C++ auf dem AVR nur eingeschränkt nutzbar ist, hat nichts mit dem 
Studio zu tun. Das liegt nur daran, daß es dafür keine vollständige 
C++-Standardlib gibt.

Oliver
Gast #2617916
Also, wenn ich die main in .cpp umbenenne, bekomme ich die Fehlermeldung 
"Fehler  1  undefined reference to `main' 
/data2/home/toolsbuild/jenkins-knuth/workspace/avr8-gnu-toolchain/src/av 
r-libc/crt1/gcrt1.S   52  1  "
Nachdem ich einiges gegoogelt hatte, bekam ich heraus, dass dies wohl 
heist, dass er die main nicht mehr findet. Ich habe sie wieder in main.c 
umbenannt. Und er hat wieder compiliert, allerdings jetzt natürlich ohne 
C++ was andere Fehler verursacht.
Gast #2617949
Steffen schrieb:
> dass er die main nicht mehr findet.

Wie denn auch? Der C-Compiler sucht die Funktion "main()", und die 
erwartet er in einer Datei mit Endung ".c". Hier also "main.c". Wenn da 
allerdings C++-Code drinnen steht, sieht der C-Compiler alt aus...
Der C++-Compiler dagegen sucht diese Funktion in einer Datei "main.cpp".
Und dieser C++-Compiler funktioniert wegen unzureichender .lib eben 
nicht so weit wie der C-Compiler.
Gast #2618031
emsen schrieb:
> Wie denn auch? Der C-Compiler sucht die Funktion "main()", und die
> erwartet er in einer Datei mit Endung ".c".

so ein unsinn, ich kann die Datei nennen wie ich will. Zur not auch 
.txt. Der Fehler kommt vom Linker und dieser sieht nur object files und 
keinen quellcode.

Ich kann mir nur vorstellen das die main bei c++ einem name mangling 
unterzogen wird. Damit sind die Parameter in name mit codiert. Wenn aber 
die Runtimelib damit nicht klar kommt, kommt es zu diesem linker fehler. 
Aus dem Grund sollte er sie als extern "C" deklarieren.
#2618094
Welcher AVR-GCC kommt zum Einsatz?
Mit welchen Optionen wird kompiliert und gelinkt?
Was sagt "avr-nm main.o" im Falle von C und im Falle von C++?

Peter II schrieb:
> Ich kann mir nur vorstellen das die main bei c++ einem name mangling
> unterzogen wird. Damit sind die Parameter in name mit codiert. Wenn aber
> die Runtimelib damit nicht klar kommt, kommt es zu diesem linker fehler.
> Aus dem Grund sollte er sie als extern "C" deklarieren.

Ich habe es eben geprüft, beim GCC kommt main nicht in die "Mangel" 
(AVR, ARM, MIPS, MSP430). Lediglich RX macht ein "_main" daraus.

Mir fällt allerdings auch nichts anderes sein, außer dem "name 
mangling". Vermutlich findet dies tatsächlich statt, und der Startup 
findet den Einstieg nicht.

Ich verwende nur C++, und es geht in jedem Fall mit AVR GCC 4.3.5, 
avr-libc 1.6.8, ohne besonderes Zutun, allerdings "direkt" mit make 
unter Linux ohne AVRStudio. Mit "avr-gcc" als Frontend genügt in der Tat 
die Endung .cpp

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.