GNUARM Linker Fehler

Gast #1077989
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
Gast #1078427
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
Gast #1078474
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
Gast #1078597
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
Gast #1080710
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren