Hallo,
hat schon jemand diese Lib mit AS7 zum laufen gebracht?
https://github.com/modm-io/avr-libstdcpp
Verwendet wird eine Toolchain mit avr-gcc 11.2.0 mit C++20 Einstellung.
Zuerst hatte ich undefinierte Referenzen auf delete und new. Das konnte
ich beheben durch verschieben der .cpp Dateien aus den example
Verzeichnis in ein gemeinsam erreichbares common Verzeichnis. Jetzt
erhalte ich noch eine undefinierte Referenz auf std::throw bad alloc()
Das kann laut meines Wissens alles mögliche sein.
Der Lib Ersteller macht nur unter Linux rum und kann mir nicht helfen.
Mein Testcode.
Wie sieht die Meldung genau aus? Mit zwei Leerzeichen im Namen?
Nicht zufällig Tiefstriche? std::bad_alloc()?
Soll die cpp-lib Ausnahmen werfen im Fehlerfall?
Und welche Compileroptionen nimmst du genau?
> Nicht zufällig Tiefstriche? std::bad_alloc()?
noch besser: std::__throw_bad_alloc().
@FO bist du sicher dass du den C++-Linker benutzt und nicht den von C?
Falls ja dann zeig doch bitte die ∗exakten∗ Compiler/Linkeraufrufe nebst
Ausgaben.
__throw_bad_alloc() steht in src/functexept.cc.
Das ganze src-Verzeichnis musst du zu deinem Projekt hinzufügen. Die
Dateien da drin müssen mit compiliert und gelinkt werden.
Oliver
Autsch. Das hatte ich gar nicht gesehen.
In dem Fall empfiehlt es sich, doch erst einmal einen Grundkurs C7C++ zu
machen, und die fortgeschrittenen Experimente auf später zu verschieben.
Oliver
Hallo,
include von new.cpp entfernt, war "nur" ein letzter verzweifelter
Versuch gewesen, der dessen Fehler scheinbar behoben hatte. src
inkludiert, kompiliert. :-) vector demzufolge erstmal okay.
Aber sort erzeugt leider erneut einen Error
undefined reference to `operator new(unsigned int)' avrLibStdCpp
<artificial> 1
Veit D. schrieb:> Aber sort erzeugt leider erneut einen Error> undefined reference to `operator new(unsigned int)'Veit D. schrieb:> Zuerst hatte ich undefinierte Referenzen auf delete und new. Das konnte> ich beheben durch verschieben der .cpp Dateien aus den example> Verzeichnis in ein gemeinsam erreichbares common Verzeichnis.
Ja, was den nun? Wenn die Datei "new" aus dem common-Verzeichnis Teil
deines Projektes ist, sollte das nicht passieren.
Oliver
In /avr-libstdcpp/examples/vector/ findet sich ein Beispiel.
In AS7 ein neues c++ Project erstellen,
in SolutionExplorer ¦ Project ¦ rechtsklick ¦ Properties ¦ Advanced ¦
eine Toolchain für c++17 wählen,
in SolutionExplorer ¦ Project ¦ rechtsklick ¦ add existing item ¦ die
Dateien *.cpp aus Verzeichnis ../examples/common/ in das Project
einbinden
in SolutionExplorer ¦ Project ¦ rechtsklick ¦ add existing item ¦ die
Dateien *.cc aus Verzeichnis ../src/ in das Project einbinden.
Source aus ../examples/vector/main.cpp in AS7 main.cpp kopieren.
Rebuild Solution sollte ohne Fehler kompilieren.
Das MAKEFILE des Beispiels zeigt den Weg.
Hallo,
Danke liebe Mitleserin. Soweit kompiliert das alles erstmal fehlerfrei.
Ich habe jedoch aktuell das Problem das meine Usart nichts ausgibt und
eine Heartbeat Led in while nicht mehr blinkt. Das Teil scheint
einzufrieren. Trotz das es fehlerfrei kompiliert. Verwende ich eine
minimal ältere Toolchain, fliegt mir alles um die Ohren. Declare
conflicts mit math.h und cmath.
Bevor ich darauf aber eingehe, weil das viel zu viel zum erklären wäre,
muss ich erstmal paar Schritte zurück und selbst versuchen was jetzt los
ist.
Ich danke allen Helfern und melde mich wenn ich soweit bin.
Danke fürs Verständnis.
Die oben beschriebenen Versuche habe ich mit einer älteren Version von
avr-libstdcpp durchgeführt.
Quelle:
https://github.com/modm-io/avr-libstdcpp/tree/2030cc27f3238419f792ac4558877f9bf571af2a
Diese Version wird in der Bibliothek
https://github.com/KonstantinChizhov/Mcucpp/tree/master/3rdparty
verwendet
Die aktuelle Version
https://github.com/modm-io/avr-libstdcpp
compiliert aber ebenfalls ohne Fehler für avr-gcc-8/9/10/11
Für avr-gcc-10/11 die bekannte Warnung:
'volatile'-qualified left operand is deprecated
*****************
Die Parameter des Beispiels ../examples/vector/main.cpp gemäss MAKEFILE
Device ATmega328p
F_CPU=16000000
-std=c++17
avr-gcc-11.1.0-x64-windows(*) avr-size: 3308 42 38 3388
d3c libstdcpp_test.elf
avr-gcc-10.1.0_x64-mingw(*) avr-size: 3352 42 38 3432
d68 libstdcpp_test.elf
avr-gcc-9.3.0-mingw64-selfmade avr-size: 3312 42 38
3392 d40 libstdcpp_test.elf
avr-gcc-8.3.0-x64-mingw avr-size: 3340 42 38 3420
d5c libstdcpp_test.elf
(*) compound assignment with 'volatile'-qualified left operand is
deprecated [-Wvolatile] libstdcpp_test
Y:\0_CPP\0_Test\libstdcpp_test\libstdcpp_test\uart.cpp 52
Hallo,
das gestern mit der usart nichts mehr ging war mal wieder der Klassiker.
Ich hatte sei() vergessen. Jetzt habe ich mit der avrLibStdCpp alles
nochmal gemacht und es funktioniert. Für mich und die Nachwelt nochmal
dokumentiert. Vielen Dank an Mitleserin.
Nebeninfo. Das mir gestern mit einer älteren Toolchain alles um die
Ohren flog mit cmath/math.h lag daran, dass meine Toolchains die
aktuelle avrlibc verwenden und die avr-libstdcpp auf eine ältere
aufbaut. In meine aktuelle Toolchain hatte ich eine ältere Version von
math.h kopieren/überschreiben. Die avr-libstdcpp macht daraus vieles
wieder undefiniert. Meine älteren Toolchains sind unverbogen.
Jetzt hätte ich noch eine Frage. Was ist der Unterschied ob ich die .cpp
und .cc Dateien in den Projektordner kopiere bzw. ob ich dem Projekt die
Verzeichnisse mittels Directories Pfadangabe bekannt mache? Warum werden
diese Dateien mit letzterem nicht gefunden?
Die eingefügten Include-Verzeichnisse erlauben das Einbinden der dort
enthaltenen Header-Dateien mit
1
#include<datei>
Für Source-Dateien genügt das nicht. Der Compiler compiliert jede
Source-Datei einzeln. Jede Source-Datei muss explizit als source.cxx
bekannt sein.
Der Link zur Datei genügt.
in SolutionExplorer ¦ Project ¦ rechtsklick ¦ add existing item ¦ ADD as
Link ¦ den LINK zu den Dateien *.cxx aus Verzeichnis ../xyz/ in das
Project einbinden.
In Output ist der Build-Prozess für jede Source-Datei dokumentiert:
Building file:
../../0_avr-libstd-cpp/avr-libst-cpp-2022/examples/common/cxxabi.cpp
../../avr-gcc-11.1.0-x64-windows\bin\avr-g++.exe" ... mit allen flags
...
Finished building:
../0_avr-libstd-cpp/avr-libst-cpp-2022/examples/common/cxxabi.cpp