我正在使用ChibiOS 3.x编写嵌入式应用程序。在编译/链接它时,我遇到如下错误消息:
/usr/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/libg.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk'
_sbrk
在哪里定义,如何解决此问题?
答案 0 :(得分:2)
_sbrk
在os/various/syscalls.c
中定义,因此请确保正确编译和链接此文件。
请注意_sbrk
将正常运行当且仅当 CH_CFG_USE_MEMCORE == TRUE
时(您可以在chconf.h
中进行更改)。否则,malloc()
将始终返回0并生成errno
ENOMEM
。另请参阅this answer以获取有关ENOMEM
问题的更全面说明。
另请注意,对于嵌入式应用程序,尤其是在针对高可靠性时,可能不建议使用动态内存分配(其中_sbrk
是其中的一部分)(请参阅this detailed explanation)< / p>
答案 1 :(得分:2)
在我的Makefile
中将$(CHIBIOS)/os/various/syscalls.c \
添加到CSRC