[En-Nut-Discussion] Ethernut 3 linking problem: multiple definitions and undefined references
José Vallet
jose.vallet at hut.fi
Fri Feb 27 15:40:36 CET 2009
Problems solved.
José Vallet wrote:
> * PROBLEM 1: multiple definitions of `_close', `_write', `_read' and
> `_open'.
> __________________
> /usr/arm-elf/lib/libc.a(syscalls.o): In function `_close':
> ../../../../.././newlib/libc/sys/arm/syscalls.c:432: multiple definition
> of `_close'
> /home/jose/ethernut/ethernut-4.4.0-bld/lib/libnutcrt.a(close.o):close.c:(.text+0x0):
> first defined here
> /usr/arm-elf/bin/ld: Warning: size of symbol `_close' changed from 60 in
> /home/jose/ethernut/ethernut-4.4.0-bld/lib/libnutcrt.a(close.o) to 16 in
> /usr/arm-elf/lib/libc.a(syscalls.o)
> __________________
We finally found the problematic function that was triggering the linker
complains by commenting out code until the linker stopped complaining.
Then we could blame directy to "strtod", and thus starting suspecting
something related to float point support in ARM. Finally we realized
that it was somehow broken for the OS version that we were using
(4.4.0), and using the latest stable release (4.6.4) solved the problem.
So there was no need to include any extra function implementation in our
app code.
> * PROBLEM 3: undefined reference to `end'
> The message from the linker is
> __________________
> /usr/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/libc.a(syscalls.o):
> In function `_sbrk':
> syscalls.c:(.text+0xdc): undefined reference to `end'
> __________________
This was related to the problem 1, as _sbrk is a fucntion added to the
Nut/OS libraries used by newlib to request heap space. It was also
solved by upgrading to version 4.6.4
Regards
José
More information about the En-Nut-Discussion
mailing list