Forum: Compiler & IDEs GNUARM Linker Fehler


von alix-r (Gast)


Lesenswert?

Hallo

ich muss wieder mal um Hilfe bitten.
Ich habe ein Projekt längere Zeit nicht bearbeitet. Jetzt treten
plötzlich beim Linker Fehler auf, die ich mir nicht erklären kann
und ich weiss auch nicht wo ich nachschauen muss um zu sehen
was falsch läuft.

Andere Projekte mit dem gleichen Compiler und ähnlicher Struktur
funktionieren dagegen einwandfrei.

Hat jemand ein Idee dazu bitte ?

Vielen Dank

alix-r


Hier paar Beispiele zu den Fehleren:

Description  Resource  Path  Location  Type
/c/gnu/newlib-build/arm-elf/newlib/libc/stdio/../../../../../newlib-1.16 
.0/newlib/libc/stdio/makebuf.c  undefined reference to `_fstat_r' 
gps-landing    59  C/C++ Problem
Description  Resource  Path  Location  Type
/c/gnu/newlib-build/arm-elf/newlib/libc/stdio/../../../../../newlib-1.16 
.0/newlib/libc/stdio/stdio.c  undefined reference to `_close_r' 
gps-landing    124  C/C++ Problem

....

und weiter

C:/Programme/GNUARM/arm-elf/lib/libc.a(lib_a-freer.o): In function 
`_malloc_trim_r':
/c/gnu/newlib-build/arm-elf/newlib/libc/stdlib/../../../../../newlib-1.1 
6.0/newlib/libc/stdlib/mallocr.c:3326:  undefined reference to `_sbrk_r'
/c/gnu/newlib-build/arm-elf/newlib/libc/stdlib/../../../../../newlib-1.1 
6.0/newlib/libc/stdlib/mallocr.c:3335:  undefined reference to `_sbrk_r'
/c/gnu/newlib-build/arm-elf/newlib/libc/stdlib/../../../../../newlib-1.1 
6.0/newlib/libc/stdlib/mallocr.c:3340:  undefined reference to `_sbrk_r'
C:/Programme/GNUARM/arm-elf/lib/libc.a(lib_a-makebuf.o): In function 
`__smakebuf_r':
/c/gnu/newlib-build/arm-elf/newlib/libc/stdio/../../../../../newlib-1.16 
.0/newlib/libc/stdio/makebuf.c:59:  undefined reference to `_fstat_r'
C:/Programme/GNUARM/arm-elf/lib/libc.a(lib_a-mallocr.o): In function 
`malloc_extend_top':
/c/gnu/newlib-build/arm-elf/newlib/libc/stdlib/../../../../../newlib-1.1 
6.0/newlib/libc/stdlib/mallocr.c:2160:  undefined reference to `_sbrk_r'
/c/gnu/newlib-build/arm-elf/newlib/libc/stdlib/../../../../../newlib-1.1 
6.0/newlib/libc/stdlib/mallocr.c:2197:  undefined reference to `_sbrk_r'
C:/Programme/GNUARM/arm-elf/lib/libc.a(lib_a-stdio.o): In function 
`__sclose':
/c/gnu/newlib-build/arm-elf/newlib/libc/stdio/../../../../../newlib-1.16 
.0/newlib/libc/stdio/stdio.c:124:  undefined reference to `_close_r'

.....


make: *** [gpsrcl.elf] Error 1

von Tilo (Gast)


Lesenswert?

Für mich sieht das so aus, als ob die Standardlibrary, meist newlib, 
nicht gefunden wird.

von alix-r (Gast)


Lesenswert?

Bin mir nicht sicher , dass es das ist.
Wie gesagt, anderes ähnliches Projekt mit fast dem gleichen
makefile , gleichen Pfaden, gleichem Compiler , auf gleichem PC,
etc. macht keine Probleme.

Noch eine andere Idee ?

tnx

von alix-r (Gast)


Lesenswert?

Noch ein Hinweis:

Es muss an der Version von GCC liegen oder an meiner Installation von 
GCC.

Bin zurück auf bu-2.17_gcc-4.1.1-c-c++_nl-1.14.0_gi-6.5.exe, damit geht
es wieder.
Mit der neuesten Version bu-2.19_gcc-4.3.2-c-c++_nl-1.16.0_gi-6.8.exe,
treten die besagten Probleme auf.

Weiss jemand warum das so ist ?

Gruss

alix-r

von Bingo (Gast)


Lesenswert?

http://www.fivemanconspiracy.com/node/19

Fill in your own routines in syscalls.c
1
 Malloc. You might not call malloc yourself, but chances are good that you use something else that calls it. Something like printf. If you dig into newlib, you'll find out that you need one file to make printf, scanf and malloc to work. This file is called "syscalls.c" and it has functions defined for "_write" "_read" and "_sbrk" which let printf, scanf, and malloc work. You'll need this. Watch out for reentrancy. If you use a newlib built to be reentrant, you'll need to use slightly different syscalls.c, which provides _sbrk_r, _write_r, _read_r.

/Bingo

von alix-r (Gast)


Lesenswert?

Entschuldigung, aber ich verstehe kein Wort.

Nicht weil die die Beschreibung in 
http://www.fivemanconspiracy.com/node/19
englisch ist, sondern der Sinn ist mir nicht klar. Was ist den jetzt
plötzlich anders als bei der vorherigen Version ?

von Tilo (Gast)


Lesenswert?

Hm, anscheinend wird die Newlib gefunden.
Allerdings fehlen die Definitionen für die syscalls.

Verwendest du Befehle wir printf etc.?
Wenn ja, musst du erst mit Syscalls die Hardware konfigurieren.
Afaik gibts da für LPC was fertiges. Bei allem anderen heißt es:
Selbst ist der Mann (oder Frau).

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.