www.mikrocontroller.net

Forum: Compiler & IDEs Anfänger Linkerscipt Problem


Autor: Simon P. (bitteeinbit)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin gerade dabei einen STM32F103 mit folgenden Tools zu 
programmieren:

Eclipse 3.5.2 IDE for C/C++
GNU ARM Eclipse (0.5.3.201001261103)
OpenOCD 0.4.0
Sourcery G++ Lite 2009q3-68

Ich verwende die FW Lib von ST in der Version 2.0.1 (ich weiß es gibt 
neuere Versionen).
Dank des GNU Arm Plugins hat sich das mit den Makefiles um einiges 
erleichtert, da ich noch nicht so viel Erfahrung damit habe.

Die Linkerscripts habe ich aus der Demo für Ride 7 entnommen, die ST in 
der FW Lib V2.0.3 bereitgestellt hat (siehe Anhang)

Nun erscheinen beim compilieren folgende Fehlermeldungen:

-TC:\<Mein Projekt Pfad>\STM32F103_512K_64K_FLASH.ld
d:/programme/codesourcery/sourcery g++ 
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/lib/th 
umb2\libc.a(lib_a-sbrkr.o):  In function `_sbrk_r':
sbrkr.c:(.text+0x12): undefined reference to `_sbrk'
d:/programme/codesourcery/sourcery g++ 
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/lib/th 
umb2\libc.a(lib_a-writer.o):  In function `_write_r':
writer.c:(.text+0x16): undefined reference to `_write'
d:/programme/codesourcery/sourcery g++ 
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/lib/th 
umb2\libc.a(lib_a-closer.o):  In function `_close_r':
closer.c:(.text+0x12): undefined reference to `_close'
d:/programme/codesourcery/sourcery g++ 
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/lib/th 
umb2\libc.a(lib_a-lseekr.o):  In function `_lseek_r':
lseekr.c:(.text+0x16): undefined reference to `_lseek'
d:/programme/codesourcery/sourcery g++ 
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/lib/th 
umb2\libc.a(lib_a-readr.o):  In function `_read_r':
readr.c:(.text+0x16): undefined reference to `_read'
d:/programme/codesourcery/sourcery g++ 
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/lib/th 
umb2\libc.a(lib_a-fstatr.o):  In function `_fstat_r':
fstatr.c:(.text+0x14): undefined reference to `_fstat'
d:/programme/codesourcery/sourcery g++ 
lite/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/lib/th 
umb2\libc.a(lib_a-isattyr.o):  In function `_isatty_r':
isattyr.c:(.text+0x12): undefined reference to `_isatty'
collect2: ld returned 1 exit status
cs-make: *** [starnode.elf] Error 1


Kann der Fehler daher kommen, dass dem Linkerskript eine Library fehlt? 
Und ja, welche?

Grüße Simon

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir deine Linkerscripts nicht angesehen, aber generell:
Libraries gibt man nicht im Linkerscript an, sondern auf der Kommando-
zeile des Linkers.  Entweder, du benennst sie komplett (libfoo.a),
oder du nimmst die Abkürzung -lfoo.  Libraries werden an der Stelle,
an der sie auf der Kommandozeile stehen, durchsucht, danach vergisst
der Linker wieder, was er darin gesehen hatte.  Man schreibst sie
daher für gewöhnlich ans Ende der Kommandozeile.

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suche mal in Richtung reentrant functions!

Die newlibc setzt zum Teil auf hardwareabhängige Funktionen auf (siehe 
Deine Fehlermeldungen und rentrant.h). Einfache minimale 
Implementationen dieser Funktionen findest Du hier im Abschnitt "11 
Reentrancy".

http://www.sourceware.org/newlib/

Autor: Simon P. (bitteeinbit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahaaaa, danke Sven. Das war ein guter Hinweis!! Werde mal schauen, ob 
ich das hinbekomme, die fehlenden Funktionen zu schreiben...

Autor: Michael D. (xaero80c51)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Simon!

Ich weiß dass dieser Thread schon ein wenig älter ist,
aber hast Du damals eine Lösung gefunden?

Habe dass selbe problem sobald ich eine Funktion aus z.B. der stdlib.h 
oder stdio.h verwenden will.

Habe Yatargo und CodeSourcery installiert.

Danke,
Michael

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.