www.mikrocontroller.net

Forum: Compiler & IDEs Fehler beim Linken mit WINARM


Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich bin gerade dabei, einen mp3-Player auf einem SAM7-EX256 von Olimex 
zu basteln. Es treten am Ende beim Linken ein paar Fehler auf (es können 
einige Referenzen nicht aufgelöst werden). Ich finde nicht heraus, woran 
das liegt. Ich habe schon rausgefunden, dass z.B. das Symbol _sbrk_r in 
reent.h definiert wäre, habe diesen Header dann auch zusätzlich 
includiert, das hilft aber auch nicht. Kann das daran liegen, dass man 
eine zusätzliche Bibliothek dranlinken muss? Wie würde man das im 
Makefile einstellen?
Im Moment sind im Makefile garkeine Libs eingestellt, ich habe den 
Eindruck, dass im Linker einige (oder alle?) bereits voreingestellt 
sind. Liege ich da richtig, oder muss ich doch zusätzliche Bibliotheken 
angeben?

> "make" all
arm-elf-gcc -D__ASSEMBLY__ -DAT91SAM7X256 -g -mcpu=arm7tdmi -c -Os -Wall -I./include  cstartup.S -o cstartup.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 lowlevel.c -o lowlevel.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 lcd.c -o lcd.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 vs1002.c -o vs1002.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 main.c -o main.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_debug.c -o FS_debug.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_dir.c -o FS_dir.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_disc.c -o FS_disc.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_efs.c -o FS_efs.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_extract.c -o FS_extract.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_fat.c -o FS_fat.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_file.c -o FS_file.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_fs.c -o FS_fs.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_ioman.c -o FS_ioman.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_ls.c -o FS_ls.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_mkfs.c -o FS_mkfs.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_partition.c -o FS_partition.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_plibc.c -o FS_plibc.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_time.c -o FS_time.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/FS_ui.c -o FS_ui.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/interfaces/FS_sd.c -o FS_sd.o
arm-elf-gcc -c -g -mcpu=arm7tdmi -Os -Wall -I./include  -I./SD-lib/inc -I./SD-lib/inc/interfaces -I./SD-lib/conf -DAT91SAM7X256 ./SD-lib/src/interfaces/FS_AT91SAM7X256.c -o FS_AT91SAM7X256.o
arm-elf-gcc -nostartfiles -Wl,-Map=AT91SAM7X256.map,--cref -lc -lgcc -T elf32-littlearm.lds -Ttext 0x201000 -Tdata 0x200000 -n -o at91sam7x_getting_started_sram.elf cstartup.o lowlevel.o lcd.o vs1002.o main.o FS_debug.o FS_dir.o FS_disc.o FS_efs.o FS_extract.o FS_fat.o FS_file.o FS_fs.o FS_ioman.o FS_ls.o FS_mkfs.o FS_partition.o FS_plibc.o FS_time.o FS_ui.o FS_sd.o FS_AT91SAM7X256.o
c:/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'
c:/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'
c:/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'
c:/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'
c:/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'
c:/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'
c:/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: *** [sram] Fehler 1

> Process Exit Code: 2
> Time Taken: 00:24


Hoffentlich kennt sich irgendjemand besser damit aus...

Grüße,

Peter

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs gefunden. Die fehlenden Funktionen müssen von Hand eingebaut 
werden, da es sich um eine sogenannte newlib handelt. Das bedeutet, dass 
die Bibliothek noch nicht auf ein bestimmtes Target fixiert ist. Die 
Funktionen, die zur Verfügung gestellt werden müssen, sind weitgehend 
zur Interaktion mit Peripherie, also putc(), getc(), kbhit() usw.

Geholfen hat mir folgender Link:

Beitrag "WinARM "sprintf" Linkerfehler"

Und folgendes Projekt, bei dem ein Beispiel (syscalls.c) beiliegt, das 
die Funktionsweise dieser Sache zeigt:

Davon USB Example 1:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm...

Und dessen sourcen:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm...

Grüße,

Peter

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.