Forum: Mikrocontroller und Digitale Elektronik Codesourcery Fehlermeldung (hosted/unhosted)


von TOOOHMAAATOOOH (Gast)


Lesenswert?

Hallo,
ich hoffe mir kann jemand bei folgender Fehlermeldung weiterhelfen
1
C:\Program Files (x86)/CodeSourcery/Sourcery G++ Lite/arm-none-eabi/lib/thumb2\libc.a(lib_a-abort.o): In function `abort':
2
abort.c:(.text+0xa): undefined reference to `_exit'
3
C:\Program Files (x86)/CodeSourcery/Sourcery G++ Lite/arm-none-eabi/lib/thumb2\libc.a(lib_a-signalr.o): In function `_kill_r':
4
signalr.c:(.text+0x18): undefined reference to `_kill'
5
C:\Program Files (x86)/CodeSourcery/Sourcery G++ Lite/arm-none-eabi/lib/thumb2\libc.a(lib_a-signalr.o): In function `_getpid_r':
6
signalr.c:(.text+0x0): undefined reference to `_getpid'
7
C:\Program Files (x86)/CodeSourcery/Sourcery G++ Lite/arm-none-eabi/lib/thumb2\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
8
sbrkr.c:(.text+0x12): undefined reference to `_sbrk'
9
collect2: ld returned 1 exit status

Laut google 
(http://communities.mentor.com/community/cs/archives/arm-gnu/msg01761.html) 
und zugehöriges getting started guide 
(http://www.google.de/url?sa=t&rct=j&q=codesourcery%20getting%20started%20guide&source=web&cd=2&sqi=2&ved=0CGMQFjAB&url=http%3A%2F%2Fwiesel.ece.utah.edu%2Fredmine%2Fattachments%2Fdownload%2F106&ei=e0GyT_-mO5CRswaM4eSuBg&usg=AFQjCNGGsuT9JYXVBTidzRt4AH4qT1av4g&cad=rja) 
handelt es sich um ein Codesourcery Feature zum debuggen. Ich nutze 
dieses Feature allerdings nicht, zumindest nicht wissentlich. Ich wollte 
eigentlich nur ein IAR Projekt in Eclipse mit ARM Toolchain + 
Codesourcery portieren.
Kennt jemand die Meldung und weis wie man das Problem behebt? Hab ich 
irgendwelche Infos vergessen zu posten?

Viele Grüße,
Chris

von Jim M. (turboj)


Lesenswert?

Schau Dir Deine Linker Settings mal an.
Bei mir half:
1
 -lc -lm -lcs3unhosted -lgcc

Die entsprechenden Funktionen sind dann als Dummy verfügbar.

von netseal (Gast)


Lesenswert?

Hallo,

was ist denn das für eine Toolchain?
Soll ein embedded Project compiliert werden? Evtl mit der newlib?

Ist es ein CrossCompiler? Kannst du mal die Makefile posten?

von TOOOHMAAATOOOH (Gast)


Angehängte Dateien:

Lesenswert?

Jim Meba schrieb:
> Schau Dir Deine Linker Settings mal an.
> Bei mir half: -lc -lm -lcs3unhosted -lgcc
> Die entsprechenden Funktionen sind dann als Dummy verfügbar.

Hab ich bereits drin:
Invoking: ARM Sourcery Windows GCC C++ Linker
arm-none-eabi-g++ 
-T"C:\Users\csander\AppData\Roaming\energymicro\Device\EnergyMicro\EFM32 
GG\Source\G++\efm32gg.ld"  -Xlinker --gc-sections -L"C:\Program Files 
(x86)/CodeSourcery/Sourcery G++ Lite/arm-none-eabi/lib/thumb2" 
-L"C:\Program Files (x86)/CodeSourcery/Sourcery G++ 
Lite/lib/gcc/arm-none-eabi/4.4.1/thumb2" -Wl,-Map,mandel.map 
--no-wchar-size-warning -mcpu=cortex-m3 -mthumb -DNDEBUG -o "mandel.elf" 
./emlib/src/em_assert.o ./emlib/src/em_cmu.o ./emlib/src/em_dbg.o 
./emlib/src/em_ebi.o ./emlib/src/em_emu.o ./emlib/src/em_gpio.o 
./emlib/src/em_rmu.o ./emlib/src/em_system.o ./emlib/src/em_usart.o 
./drivers/graphics/dmd/ssd2119/dmd_ssd2119_direct.o 
./drivers/tftdirect.o ./drivers/tftspi.o  ./bsp/dvk.o ./bsp/dvk_ebi.o 
./bsp/dvk_spi.o ./bsp/trace.o  ./EFM32GG/Source/G++/startup_efm32gg.o 
./EFM32GG/Source/system_efm32gg.o  ./mandel.o   -lc -lm -lcs3unhosted 
-lgcc -lcs3

netseal schrieb:
> Hallo,
>
> was ist denn das für eine Toolchain?
> Soll ein embedded Project compiliert werden? Evtl mit der newlib?
>
> Ist es ein CrossCompiler? Kannst du mal die Makefile posten?

Das Projekt existiert als Makefile-Projekt und normales C++ Projekt, bei 
beiden kommt die gleiche Error Meldung. Ich hab das Makefile des 
Makefile-Projekts mal angehängt, da es besser lesbar ist als der dreck 
vom normalen C++ Projekt.

Da ich meinem Projekt einige C++ Files hinzufügen will habe ich mein 
main file (mandel.c) in mandel.cpp umbenannt. Seitdem spuckt der Linker 
die Fehlermeldungen aus.

von TOOOHMAAATOOOH (Gast)


Lesenswert?

ein Thread der sich anscheinend mit dem gleichen Problem beschäfftigt: 
http://embdev.net/topic/129607

Resultat dieses Threat: "mach einfach Function stubs hin, dann meckert 
der Linker nichtmehr". Wenn ich das mache, verschwinden die 
Fehlermeldungen und das Programm läuft auch auf dem Controller. Ich 
würde allerdings gern Verstehn wo der Fehler her kommt und wie man ihn 
sinnvoll behebt.

von (prx) A. K. (prx)


Lesenswert?

Du sprichst irgendeine Funktion aus der newlib an, die direkt oder über 
Zwischenschritte die o.A. Funktionen benötigt. Das kann 
Speicherallokation sein (new/delete), printf, exception handling, ...

von TOOOHMAAATOOOH (Gast)


Lesenswert?

ich werd mal schaun, der code stammt leider nicht von mir daher kann ich 
aus der stehgreif dazu nix sagen, aber ich werds mir anschaun. Aber wie 
kann es sein das der Fehler nicht kommt wennn ich nur .c dateien 
compiliere/linke und nur durch das umbenennen des mainfiles in .cpp + 
Anpassung des makefiles, kommt plötzlich diese Fehlermeldung. Sind sich 
c und cpp compiler so unterschiedlich was newlib angeht?

von (prx) A. K. (prx)


Lesenswert?

TOOOHMAAATOOOH schrieb:

> c und cpp compiler so unterschiedlich was newlib angeht?

In C++ hast du leicht new/delete an der Backe, weil u.U. implizit 
irgendwo im Umfeld von Konstruktoren vergraben. Und auch das exception 
handling, wenn nicht explizit abgeschaltet.

von TOOOHMAAATOOOH (Gast)


Lesenswert?

A. K. schrieb:
> TOOOHMAAATOOOH schrieb:
>
>> c und cpp compiler so unterschiedlich was newlib angeht?
>
> In C++ hast du leicht new/delete an der Backe, weil u.U. implizit
> irgendwo im Umfeld von Konstruktoren vergraben. Und auch das exception
> handling, wenn nicht explizit abgeschaltet.

ich hab meine cpp libs/files ja noch garnicht dem projekt hinzugefügt, 
nur eine c-datei, welche ausschließlich C-Code, also keine klassen, 
beinhaltet, umbenannt in .cpp.
Wenn ich einige der cpp Files dem Makefile als source hinzufüge (welche 
unter IAR wunderbar compilieren), dann kommen noch mehr dieser 
Fehlermeldungen.

von (prx) A. K. (prx)


Lesenswert?

-fno-rtti
-fno-exceptions

Das exception handling hast du nämlich bereits an der Backe, wenn du den 
Kram unverändert als C++ übersetzt und dich nicht dagegen gewehrt hast. 
Musst du rein garnix dafür tun, aber eben dagegen.

von TOOOHMAAATOOOH (Gast)


Lesenswert?

danke,
so eine Lösung hab ich mir vorgestellt, verständlich und für jeden 
nachvollziehbar.

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.