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
Danke, das hab ich schon gesehen. Allerdings gabs damals noch einiges,
dass nicht funktioniert.
Zur Zeit habe ich diese Version drauf
http://www.atmel.com/Microsite/atmel_studio6/compiler_editor.aspx und
hatte gehofft, dass sich da ein bisschen was getan hat.
lg
???
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
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.
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.
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.
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
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.