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.
wie die deine definition von main? deklariere sie mal als extern "C"
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.