undefined reference to `atexit'
-
Hallo zusammen,
ich habe folgenden Code:
class A { public: ~A() {} }; class B { private: A a; public: static B& GetInstance() { static B instance; return instance; } };
Beim linken bekomme ich folgende Fehlermeldung in Zeile 15:
undefined reference to `atexit'
Ich baue den Code für einen Arduino Leonardo mit dem Eclipse-Arduino-Plugin und der Arduino Bibliothek.
Ich hab das Beispiel mal auf ein Minimum runtergebrochen, bei dem der Fehler noch zu reproduzieren ist.
Klasse B soll ein Singleton werden. Das Problem scheint der Destruktor von Klasse A zu sein. Entferne ich ihn, dann klappt es. Was mache ich falsch?THX
-
Jester2000 schrieb:
Was mache ich falsch?
du postest nicht den relevanten Code. Mit dem Beispiel it der Fehler nicht nachvollziehbar.
-
Danke für die schnelle Antwort.
Wenn ich mit obigen Code
B::GetInstance();
aufrufe, dann kommt der Error.
-
Jester2000 schrieb:
Danke für die schnelle Antwort.
Wenn ich mit obigen Code
B::GetInstance();
aufrufe, dann kommt der Error.
Nein, kommt er nicht. Oh, ich bezweifle nicht, dass du den Fehler bekommst. Aber nicht mit dem gezeigten Code. Siehe den dritten Link in meiner Signatur.
edit: Eine exotische Möglichkeit gibt es noch: Linkst du das irgendwie komisch? Sieht so aus als würdest du die Standardbibliothek nicht mitlinken. Wie genau erstellst du das Programm? Falls das der Compiler GCC im Zusammenspiel mit dem Linker ld ist (was ich von der Fehlermeldung her vermute), könnte dies dadurch geschehen, dass du das C-Frontend (gcc) statt das C++-Frontend (g++) benutzt.
-
Nein, da kommt kein Error:
-
Ich hab einfach ein neues Arduino-Projekt erstellt (über das Arduino-Plugin), das Board und den Port definiert, und den Rest erledigt das Arduino-Plugin für mich (oder auch nicht
)
Folgende Ausgabe hab ich auf der Konsole:
Building file: ../Main.cpp Invoking: AVR C++ Compiler avr-g++ -I"D:\Apps\arduino-1.0.4\hardware\arduino\cores\arduino" -I"D:\Apps\arduino-1.0.4\hardware\arduino\variants\leonardo" -I"D:\Projects\Workspaces\Arduino\Test2" -D__IN_ECLIPSE__=1 -DUSB_VID=0x2341 -DUSB_PID=0x8036 -DARDUINO=104 -Wall -Os -ffunction-sections -fdata-sections -fno-exceptions -g -mmcu=atmega32u4 -DF_CPU=16000000UL -MMD -MP -MF"Main.d" -MT"Main.d" -c -o "Main.o" -x c++ "../Main.cpp" ./Main.o: In function `B::GetInstance()': D:\Projects\Workspaces\Arduino\Test2\Release/../Main.cpp:16: undefined reference to `atexit' make: *** [Test2.elf] Error 1 Finished building: ../Main.cpp
Bin noch neu auf dem Arduino-Gebiet und war deshalb froh, das mir das Plugin die Arbeit so erleichtert. Nur stehe ich jetzt vor diesem Problem.
-
Füg mal den Schalter
-fno-use-cxa-atexit
hinzu.
-
Der Schalter -fno-use-cxa-atexit hat leider nicht das Problem behoben, aber der Schalter -nostdlib im Linker hat zum Erfolg geführt.
Danke für eure Mühe und den Denkanstoß, das etwas mit den Compiler/Linker-Einstellungen nicht richtig war.