Hallo, ich habe wiedermal ein kleines Problem mit Eclipse bzw. WinARM. Ich benutze ein Linker-Script-File und muss hierzu in Eclipse unter den Linker-Einstellungen die gcc-library entfernen, da sonst beim Linken folgende Fehlermeldung auf der Konsole ausgegeben wird: c:\WinARM\bin\arm-elf-ld.exe: cannot find -lgcc Beim Dividieren ist jetzt das folgende Problem aufgetaucht: undefined reference to `__udivsi3' Ich vermute, dass es an der entfernten gcc-library liegt. Weiß jemand, wie man mein Problem lösen kann? Linker-Script-File editieren, andere Toolchain benutzen, oder spezielle Library´s einbinden? Linker-Script-File: /*********************************************************************** / /* */ /* ROM.ld: Linker Script File */ /* */ /*********************************************************************** / ENTRY(_boot) STACK_SIZE = 0x400; /* Memory Definitions */ /* lpc2129 mt */ MEMORY { ROM (rx) : ORIGIN = 0x00000000, LENGTH = 0x0001E000 RAM (rw) : ORIGIN = 0x40000000, LENGTH = 0x00004000 } /* Section Definitions */ SECTIONS { /* first section is .text which is used for code */ .text : { *crt0.o (.text) /* Startup code */ *(.text) /* remaining code */ *(.rodata) /* read-only data (constants) */ *(.rodata*) *(.glue_7) *(.glue_7t) } > ROM . = ALIGN(4); /* .ctors .dtors are used for c++ constructors/destructors */ /* added by Martin Thomas 4/2005 based on Anglia Design example */ .ctors : { PROVIDE(_ctors_start_ = .); KEEP(*(SORT(.ctors.*))) KEEP(*(.ctors)) PROVIDE(_ctors_end_ = .); } >ROM .dtors : { PROVIDE(_dtors_start_ = .); KEEP(*(SORT(.dtors.*))) KEEP(*(.dtors)) PROVIDE(_dtors_end_ = .); } >ROM . = ALIGN(4); /* mthomas - end */ _etext = . ; PROVIDE (etext = .); /* .data section which is used for initialized data */ .data : AT (_etext) { _data = .; *(.data) SORT(CONSTRUCTORS) /* mt 4/2005 */ } > RAM . = ALIGN(4); _edata = . ; PROVIDE (edata = .); /* .bss section which is used for uninitialized data */ .bss (NOLOAD) : { __bss_start = . ; _bss_start_ = . ; *(.bss) *(COMMON) . = ALIGN(4); } > RAM . = ALIGN(4); _bss_end_ = . ; PROVIDE (__bss_end = .); /* .stack ALIGN(256) : */ .stack : { . = ALIGN(256); . += STACK_SIZE; PROVIDE (_stack = .); } > RAM _end = . ; PROVIDE (end = .); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2 */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } } Gruß Sebastian
Hallo, die Funktion __udivsi3 ist in der GCC Lib, das -lgcc brauchst du deshalb. Hast schon probiert den Pfad für die GCC Lib als Linkeroption anzugeben? Du musst nur aufpassen, es gibt die Lib normalerweise in verschiedenen Ausführungen (Thumb-Mode, Interworking, etc). Hier musst du dann das Richtige Verzeichniss verwenden. Gruß Daniel
Sebastian H. wrote: > Linker-Einstellungen die gcc-library entfernen, da sonst beim Linken > folgende Fehlermeldung auf der Konsole ausgegeben wird: > > c:\WinARM\bin\arm-elf-ld.exe: cannot find -lgcc Rufst du den Linker etwa direkt auf? Oder verwendest du gcc als Treiber? ld ist ziemlich dumm, du musst ihm haargenau die Pfade vorkauen und was er zu machen hat. Verwende mal gcc als Linker und schau mit -v nach, was er dem ld alles mitgibt an Pfaden, denn ld weiß nix von einer libgcc. Johann
Thx Daniel, TOP-Fachmann ;-) Habe jetzt "C:\WinARM\lib\gcc\arm-elf\4.1.1" bei Library search path eingefügt. In dem Verzeichnis befindet sich u.a. eine libgcc.a Datei.
@ Johann: Ja, ich rufe den Linker direkt auf (arm-elf-ld). Wenn ich arm-elf-gcc benutze, treten andere Linker-Problemchen auf: C:\Programme\eclipse\Workspace\Drehzahl\Release/../crt0.s:91: multiple definition of `_start': mallocr.c:(.text+0x424): undefined reference to `_sbrk_r' usw. Ich habe die Variante mit dem Linker-Script so übernommen, ohne beurteilen zu können, ob das jetzt "hau drauf" oder "elegant" ist. Ich programmiere einen LPC2119 mit Eclipse und versuche mir jetzt alles selbst beizubringen. Bin leider noch weit entfernt, um wirklich zu verstehen, was ich da mache ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.