EmbDev.net

Forum: ARM programming with GCC/GNU tools _sbrk exists, linker can't find it


von Liviu V. (liviu)


Rate this post
useful
not useful
Hello,

I'm trying to compile a program for a stm32f4-discovery board using code 
sourcery g++ lite and I'm having a peculiar problem. My program uses the 
"new operator" and I had to implement the _sbrk function.

Here is the linker command:
arm-none-eabi-g++ -mthumb -mcpu=cortex-m4 -march=armv7e-m 
-mfix-cortex-m3-ldrd -o main.elf -O2  -g -Wall -Werror 
-Wl,-T/home/li/dev/arm_rc/ld/cs3.ld  main.o start_cs3.o newlib_stubs.o

_sbrk is in newlib_stubs.c (.o). Knowing that order of the files on the 
command line counts, I tried moving newlib_stubs.o as first/last 
argument but with no success.

What could be wrong?

Note that the C version of the program that uses malloc is compiling 
just fine (arm-none-eabi-gcc instead of arm-none-eabi-g++)

Thanks,
Liviu

von Jörg W. (dl8dtl) (Moderator)


Rate this post
useful
not useful
Liviu Vasut wrote:

> Note that the C version of the program that uses malloc is compiling
> just fine (arm-none-eabi-gcc instead of arm-none-eabi-g++)

Did you perhaps compile newlibs_stubs with the C++ compiler, so the
names got their C++ mangling?

Try running arm-none-eabi-nm on the file newlib_stubs.o, and see
which symbol it is reporting for _sbrk.

Btw., the order of explicitly mentioned .o files on the commandline
(almost) doesn't matter.  It's only the order of library files that
matters.

von Liviu V. (liviu)


Rate this post
useful
not useful
Thanks Jörg, you made my day!

That was indeed the problem and now it's solved. I learned something 
today (again) :).

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.