mikrocontroller.net

Forum: Compiler & IDEs GNUARM Linker Fehler


Autor: alix-r (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tilo L. (katagia)
Datum:

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

Autor: alix-r (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: alix-r (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.fivemanconspiracy.com/node/19

Fill in your own routines in syscalls.c
 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

Autor: alix-r (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Tilo L. (katagia)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.