mikrocontroller.net

Forum: Compiler & IDEs WinARM "sprintf" Linkerfehler


Autor: Ferdinand S. (noonien) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich bin noch Anfänger in Sachen ARM. Bis jetzt komme ich eigentlich ganz 
gut zurecht nur als ich versucht habe "sprintf" zu verwenden, gab es 
einen Linkerfehler:

Linking: main.elf
arm-elf-gcc  -mcpu=arm7tdmi-s  -I. -gdwarf-2 -DROM_RUN -DVECTORS_IN_RAM 
-D__WinARM__  -Os -Wall -Wcast-align -Wimplicit  -Wpointer-arith 
-Wswitch -Wredundant-decls -Wreturn-type -Wshadow -Wunused 
-Wa,-adhlns=Common_WinARM/src/Startup.lst  -ICommon_WinARM/inc 
-Wcast-qual -MD -MP -MF .dep/main.elf.d Common_WinARM/src/Startup.o 
Common_WinARM/src/swi_handler.o   Common_WinARM/src/irq.o 
Common_WinARM/src/target.o Common_WinARM/src/timer.o main.o     --output 
main.elf -nostartfiles -Wl,-Map=main.map,--cref -lc  -lm -lc -lgcc 
-TCommon_WinARM/LPC2138-ROM.ld
d:/programme/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib 
\libc.a(freer.o):  In function `_malloc_trim_r':
mallocr.c:(.text+0x48): undefined reference to `_sbrk_r'
mallocr.c:(.text+0x64): undefined reference to `_sbrk_r'
mallocr.c:(.text+0x84): undefined reference to `_sbrk_r'
d:/programme/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib 
\libc.a(makebuf.o):  In function `__smakebuf':
makebuf.c:(.text+0x3c): undefined reference to `_fstat_r'
makebuf.c:(.text+0x110): undefined reference to `isatty'
d:/programme/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib 
\libc.a(mallocr.o):  In function `_malloc_r':
mallocr.c:(.text+0x424): undefined reference to `_sbrk_r'
mallocr.c:(.text+0x4cc): undefined reference to `_sbrk_r'
d:/programme/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib 
\libc.a(stdio.o):  In function `__sclose':
stdio.c:(.text+0xc): undefined reference to `_close_r'
d:/programme/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib 
\libc.a(stdio.o):  In function `__sseek':
stdio.c:(.text+0x30): undefined reference to `_lseek_r'
d:/programme/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib 
\libc.a(stdio.o):  In function `__swrite':
stdio.c:(.text+0x84): undefined reference to `_lseek_r'
stdio.c:(.text+0xac): undefined reference to `_write_r'
d:/programme/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib 
\libc.a(stdio.o):  In function `__sread':
stdio.c:(.text+0xd0): undefined reference to `_read_r'
collect2: ld returned 1 exit status
make.exe: *** [main.elf] Error 1

Kann mir da wer helfen? Im Forum habe ich über die Suche nichts 
gefunden.
Also Danke für jede Hilfe!

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast eine frische, noch nicht angepasste newlib für deinen Prozessor 
verwendet. Die newlib Library ist so ausgelegt, dass sie bestimmte vom 
Programmierer (dir) bereitzustellende Funktionen aufruft.

Man nennt diese Funktionen STUB-Funktionen. Das _r ist ein Kennzeichen, 
dass die Funktionen reentrant programmiert sein sollen.

Mehr über das Schreiben dieser STUBS findest du in einer interessanten 
Artikelserie von Bill Getliff
http://www.embedded.com/story/OEG20020103S0073

An dem Datum erkennt du, dass es ein sehr altes Thema ist... 
dementsprechend ist deine Frage DIE Standardfrage, an der man erkennt, 
dass ein "Neuer" zur GCC ARM Szene hinzugekommen ist ;-)

Du kannst dich auch mit deinem Prozessormodell auf die Suche nach 
bereits geschriebenen Stub-Funktionen machen. Dazu solltest du dir das 
Forum http://en.mikrocontroller.net merken und gelegentlich besuchen. 
Verschiedene Yahoo Gruppen haben auch einen regen ARM-Teilnehmerkreis.

Autor: Ferdinand S. (noonien) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry dass ich euch mit so einer anscheinend typischen Anfängerfrage 
belästigen musste ^^
Dann beschäftige ich mich mal schön damit...

Bei WinAVR ist das einfacher :P

Danke nochmal!

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bei WinAVR ist das einfacher :P

Naja, ich sag' nur "make all" geht nicht ;-)

Meine Antwort sollte nicht nach "ich fühle mich belästigt klingen". Ich 
bin selbst nur zwei Schritte vor dir. Wenn du etwas Gas gibst, hast du 
mich mit dem ARM überholt.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, habe das gleiche Linkerproblem mit dem sprintf, es liegt wohl an 
einer alten Library wie bekomme ich den Update in das WinARM?

Das ist wohl die aktuelle newlib-lpc_rel_5.zip.

Bin ebenfalls seit zwei Tagen auf der WinARM Schiene, die LED blinken 
schon mal.

Danke und schöne Grüße

Johann

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.