Forum: Compiler & IDEs Cross ARM C++ Linker Problem bei c++ Code mit Klassen


von Jonas D. (daemmi)


Lesenswert?

Hey,

ich hab nun Eclipse Kepler mit CDT, GDB, OpenOCD, Yagarto und Sourcery 
CodeBench Lite zum laufen gebracht.

Es funktioniert eigentlich alles solange ich nur C-Code habe. Sobald ich 
aber eine Klasse erstelle bekomme ich Linker Probleme....

Der Fehler:

17:22:34 **** Incremental Build of configuration Release for project 
DigiPot ****
cs_make all
Building target: DigiPot.elf
Invoking: Cross ARM C++ Linker
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=soft -Os 
-fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections 
-Wall  -g -T libs.ld -T mem.ld -T sections.ld -nostartfiles -Xlinker 
--gc-sections -L"../ldscripts" -Wl,-Map,"DigiPot.map" -o "DigiPot.elf" 
./src/test/main.o ...
./src/test/main.o: In function `_GLOBAL__sub_I_LED_Green':
C:\Dokumente und 
Einstellungen\ENG2\Desktop\RFID\eclipse\workspace\DigiPot\Release/../src 
/test/main.cpp:107:  undefined reference to `__dso_handle'
c:/sourcery_codebench_lite_for_arm_eabi/bin/../lib/gcc/arm-none-eabi/4.8 
.1/../../../../arm-none-eabi/bin/ld.exe:  DigiPot.elf: hidden symbol 
`__dso_handle' isn't defined
c:/sourcery_codebench_lite_for_arm_eabi/bin/../lib/gcc/arm-none-eabi/4.8 
.1/../../../../arm-none-eabi/bin/ld.exe:  final link failed: Bad value
collect2.exe: error: ld returned 1 exit status
cs_make: *** [DigiPot.elf] Error 1

Ich werde nicht Schlau daraus. Es wird doch der C++ Linker genutzt...

Weiß jemand weiter?! Wäre super! Vielen Dank!!

Gruß Jonas

von Mark B. (markbrandis)


Lesenswert?

Möglicherweise kann dies weiterhelfen:

http://gcc.gnu.org/ml/gcc-help/2009-09/msg00146.html

von Jonas D. (daemmi)


Lesenswert?

Hey,

also das bringt mich leider auch nicht weiter...

Ich kann noch dazu sagen das ich ein C++ Projekt template für den 
STM32F4 genutzt habe. Dieses wird ja beim erstellen eines neuen Projekts 
unter Executable angeboten.

Den Code den ich versuche zu compelieren kann ich mit anderen IDEs ohne 
Probleme umsetzen z.B. mit IAR oder EM::Blocks.

Gruß Jonas und danke für die Unterstützung

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Jonas Damhuis schrieb:
> Weiß jemand weiter?! Wäre super! Vielen Dank!!

Ich kann dir die Fehlermeldung übersetzen.
Der Linker wird genötigt auf `__dso_handle' zuzugreifen und findet es 
nicht. Variablen mit führenden Unterstrich sind interne Geschichten.
In deinem Fall heisst dass sicherlich Zugriff auf das Betriebssystem.

Das du es compilieren kannst scheint, dass es zumindest eine Menge 
stimmt.
Es könnte gut sein, dass du Librarys oder weitere Dateien vom 
Betriebssystem oder dem Linker übergeben musst.


-l library
Search the library named library when linking.

Vielleicht kannst du in link Optionen beim IAR einschauen.

René

von Jonas D. (daemmi)


Lesenswert?

Hey danke für die Beschreibung.

Also bei Em::Blocks und IAR musste ich bei den Linker Settings immer 
angeben das er C++ Librarys nutzen soll. Wie mache ich das nun bei 
Eclips?!....

Dazu versteh ich leider auch nicht wo ich die Befehle wie bei dir oben 
-l library eingeben muss...

Gruß Jonas

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
Noch kein Account? Hier anmelden.