PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ auf arm2103



drew
08.08.2009, 20:56
Hallo,
ich versiche gerade für mein ARM-board ein C++ Program zu übrsetzen.
Ich bin dabei von einem C-Programm ausgegangen:
http://www.ixbat.de/index.php?page_id=94
(Bei diesem Beispiel habe ich den Inhalt von makefile und Linkerscript einigermasen verstanden. ;-))
Ich habe harausgefunden, dass ich die sections: .ctors und .dtors brauche und ins Linkerscript eingebaut.
Jetzt bekomme ich ncoh folgende Fehlermeldung:

C:\Users\Andi\programing\arm\lpc2103_blink>make
arm-elf-ld -o blink.elf crt.o main.o -T lpc2103_flash.cmd \
-Map blink.map
arm-elf-ld: blink.elf section .text._ZN8C_LpcPin6toggleEv will not fit in region ram_isp_low
arm-elf-ld: section .bss [40000120 -> 4000012b] overlaps section .text._ZN8C_Lpc Pin6toggleEv [4000011c -> 40000143]
arm-elf-ld: region ram_isp_low overflowed by 36 bytes
main.o: In function `C_Pin':
C:\Users\Andi\programing\arm\lpc2103_blink/main.cpp:21: undefined reference to `vtable for C_Pin'
main.o:(.rodata._ZTI8C_LpcPin[_ZTI8C_LpcPin]+0x0): undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'
main.o:(.rodata._ZTI8C_LpcPin[_ZTI8C_LpcPin]+0x10): undefined reference to `typeinfo for C_Pin'
make: *** [blink.elf] Error 1

Mein Projekt habe ich angehängt...

Schon mal Danke,
ein verzweifelter Drew

021aet04
08.08.2009, 23:32
Könnte es sein, dass etwas nicht eingebunden ist, sich im falschen Ordner befindet oder nicht richtig eingebunden ist? In der 2. und 3. Zeile steht "undefined reference to ...". Das deutet darauf hin.

drew
09.08.2009, 11:16
Hallo,
danke für Deine Antwort.
C_PIN ist meine Klasse. Die ist in main.cpp sicher vorhanden. Alledings sicht der Linker nach vtable für C_PIN. :-k Könnte sein, dass da tatsächlich was fehlt? Ich habe bis jetzt keine Libs eingebunden.
Brauche ich für C++ (mit virtuellen Klassen) eine bestimmte Bibliothek? Brauche ich Libc.a oder Libgcc.a. Laut Beschreibung hat das nichts mit C++ zu tun, oder?

Was mich auch beunruhigt ist, dass er versucht was in die Section: ram_isp_low zu legen. Die sollte eigentlich für den internen Bootloader reserviert sein!
Fehlt hier vielleicht noch eine Section, die er nicht findet und desshalb mal was nach ram_isp_low legt?

Drew

drew
09.08.2009, 11:21
Nachtrag...
Ich hab gerade noch einen Versuch gestartet und die virtuelle Klasse raus geschmissen. So wurde es erfolgreich übersetzt. Das Problem hat also mit der virtuellen Klasse zu tun.

Drew

Kenny5020
09.08.2009, 14:25
Kennst du die Seite schon, da gehts konkret um C++ auf einem LPC2129.
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#lpc_cpp1

Ich hab zwar noch nicht mit C++ auf den ARMs gearbeitet, aber soweit ich weis braucht man in C++ wenn man eine virtuelle Klasse hat, einen vtable, der entscheidet von wem der Destruktor dann aufgerufen wird. Ich bezweifle mal, dass das in den files von Benedikt Sauter schon implementiert ist.

drew
09.08.2009, 17:12
hallo,
danke, ich denke, das hat mir etwas weiter geholfen. Allerdings kann ich das Beispiel nicht übersetzen. :-(
Ich verwende yagarto und da sind die Includes in:
arch/philips/newlib-lpc/
nicht mit drin.
Ich hab die dann in einer Instllation von WinArm gefunden und rein kopiert. Das compiliren geht jetzt aber der Linker findet newlib-lpc.a nicht. Das gibt es aber nur als Sourcen (?) und die kann ich nicht übersetzen...
:-(:-(:-(:-(
Das ist doch verhext...

Kann mir jemand weiterhelfen?

Drew