Неопределенная ссылка на _sbrk в ChibiOS
Я использую 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
определены и как я могу решить эту проблему?
2 ответа
_sbrk
определяется в os/various/syscalls.c
, поэтому убедитесь, что этот файл правильно скомпилирован и связан.
Обратите внимание, что _sbrk
будет работать правильно, если и только если CH_CFG_USE_MEMCORE == TRUE
(вы можете изменить это в chconf.h
). В противном случае, malloc()
всегда будет возвращать 0 и приведет к errno
из ENOMEM
, Также см. Этот ответ для более подробного объяснения ENOMEM
вопрос.
Также обратите внимание, что для встраиваемых приложений, особенно при высокой надежности, может быть нецелесообразно использовать динамическое выделение памяти (из которых _sbrk
является частью) на всех (см. это подробное объяснение)
Добавленной $(CHIBIOS)/os/various/syscalls.c \
в CSRC
в моем Makefile