Hi, ich habe ein merkwürdiges Problem. Wenn ich in meinem STM32 Projekt (EM_Blocks) mit GCC mein C++ Projekt in einzelne Datein zerlegen will, geht das auch erstmal. Nur wenn ich in meinen selbst erstellten Header-Files Stantdard-Header z.B #inlcude <vektor> oder #inlcude <iostream> einbinden will, dann bekomme ich einen Compiler-Fehler. Er kann die Datein nicht finden. Kopiere ich aber den selben Code direkt in eine .cpp Datei dann wird das Programm problemlos übersetzt??? Weiß jemand vielleicht was da los ist? Muss man da noch irgendwelche Einstellungen vornehmen? Danke schonmal, weiß gerade nicht was ich machen soll. PS: Habe schon versucht auch die Header in den Ordner src wo die .cpp Datein liegen zu kopieren. Funktioniert leider trotzdem nicht??
#inlcude <iostream> Was soll das denn sein?
Dein Problem ist komisch und sollte so nicht auftreten. Alles was ein include macht ist ja nur den Text aus der entsprechenden Datei dort einzufügen wo das include steht. Es sollte also keinen Unterschied machen ob die includes für die Standardlibrary in deinen Headern steht oder in der .cpp Datei. Da deine Beispiele von oben aber voller Tippfehler sind poste doch mal bitte die tatsächlichen Dateien.
Oft hilft es die genaue Fehlermeldung zu posten statt "kommt ein Fehler". Zeig mal deine Include Datei. Wahrscheinlich ist da ein #ifdef drin.
Hallo, ja das mit dem <Vektor> statt <Vector> passiert mir des öftern mal. Sorry Also ich habe hier folgende Fehlerausgabe mit #include <vector> #include <algorithm> C:\Users\Eckert\Documents\yC\SensorBox++\src\main.cpp:63||undefined reference to `__cxa_end_cleanup'| und obj\release\src\main.o:(.ARM.extab.text.startup.main+0x0)||undefined reference to `__gxx_personality_v0'| Wenn ich mit #include <iostream> arbeite kommt folgende Meldung dazu c:\program files (x86)\emblocks\2.30\share\em_armgcc\bin\..\lib\gcc\arm-none-eabi\4.7.3\. .\..\..\..\arm-none-eabi\include\c++\4.7.3\iostream:75||undefined reference to `std::ios_base::Init::Init()'| Denke mal, dass ich die iostream Bib nicht brauche, habe hier ja kein sdin/stdout oder? Danke schon mal für eure Hilfe. Gruß PS: Wenn ich versuche ein Objekt dynamisch zu erzeugen kommt folgendes Hinzu: CEncoder *ptrEncoder = new CEncoder(GPIOA, GPIO_Pin_4, GPIOB, GPIO_Pin_5); ergibt: C:\Users\Eckert\Documents\yC\SensorBox++\src\main.cpp:51||undefined reference to `operator new(unsigned int)'| C:\Users\Eckert\Documents\yC\SensorBox++\src\main.cpp:51||undefined reference to `operator delete(void*)'|
Es gibt keine C++ Standard Library (zumindest ist keine mitgeliefert, vielleicht gibt es sie mittlerweile irgendwo). Siehe Beitrag "STM32 C++ Toolchain"
Student schrieb: > Es gibt keine C++ Standard Library (zumindest ist keine > mitgeliefert, > vielleicht gibt es sie mittlerweile irgendwo). Und was ist dann das da: http://de.wikipedia.org/wiki/C%2B%2B-Standardbibliothek Und die ist, oh Wunder, auch beim GCC für Cortex-M mitgeliefert. Daniel Eck schrieb: > PS: Wenn ich versuche ein Objekt dynamisch zu erzeugen kommt folgendes > Hinzu: Bist du sicher dass du dynamischen Speicher verwenden willst? Wie viel RAM hast du zur Verfügung? Wenn du das willst, musst du malloc entsprechend konfigurieren (Bereich im Linkerscript zuweisen etc). Deine Fehler sind keine include-Fehler, die Header werden sehr wohl gefunden. Du musst aber mit der C++ Standard Library auch linken. Das geht, indem du mit "g++" statt "gcc" linkst. Wenn du direkt mit "ld" linkst, versuche mal "-lstdc++" zu übergeben. Was soll <iostream> auf einem Mikrocontroller? Da hast du kein std::cout etc.
Hi, OK dynamischer Speicher muss nicht sein bzw. könnte auch mit malloc() umgesetzt werden. Ich habe nun schon öfter gehört, das ich g++ verwenden soll, aber wie? Ich habe den gcc in der IDE integriert geliefert bekommen und habe bisher auch keine Option gefunden einen anderen zu wählen?
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.