Неопределенная ссылка на sbrk

У меня проблема с _sbrk. На этапе компиляции ссылок я использую ниже comand для связи моих объектов, и я получаю неопределенную ссылку на _sbrk.

arm-none-eabi-ld -static -T linkerscript.ld -o exe timer_example.o /home/ziga/projects/cs_lite/arm-none-eabi/lib/libc.a /home/ziga/projects/cs_lite/lib/gcc/arm-none-eabi/4.5.1/libgcc.a

я компилирую для arm926ej-s и в режиме ARM, поэтому я думаю, что выбрал правильный multilib (libc.a и libgcc.a) который находится в папке home/ziga/projects/cs_lite/arm-none-eabi/lib/.

Я искал в интернете функцию _sbrk, и это своего рода вызов управления памятью, который не включено в стандартных библиотеках C, как это зависит от микропроцессора. Soo должен ли я писать функцию _sbrk самостоятельно? Как мне это сделать? У вас есть пример для arm926ej-s? После написания этой функции я намерен скомпилировать ее в объектный файл и связать с другими объектами, библиотеками.

С уважением, Зига.


Я решил эту проблему и решение здесь, так что я что-то отдавать "комьюнити". Функция _sbrk находится внутри NXP Пакет CDL для руки. Пакет доступен для скачивания (ссылка для всех, кто этого еще не знает) здесь: http://www.lpclinux.com/Downloads/WebHome В подпапке CDL_v005 / csps/lpc313x/bsps/ea3131 / source вы найдете исходный файл имени libnosys_gnu.c, который должен быть добавлен в проект и скомпилирован в объект файл и после этого связанный с исполняемым файлом наряду с другими объектами и библиотеки.

наилучшие пожелания и много успеха.

3 ответов


Это помогает:

-mcpu=cortex-m4-mthumb-specs=nano.спецификации-specs=nosys.технические характеристики-mfpu=fpv4-sp-d16-mfloat-abi=hard

важными переключателями "кажутся":

-specs=nano.спецификации-specs=nosys.технические характеристики


проблема имеет мало общего с _sbrk сам, а скорее ваша попытка вызвать компоновщик напрямую, минуя драйвер компилятора. Вместо этого используйте команду gcc для вызова компоновщика и -Wl,-linkeroptionhere синтаксис для передачи дополнительных параметров компоновщику.

одно возможное решение, если вы должны вызвать компоновщик самостоятельно.. Попробуйте повторить оба libc.a и libgcc.a второй раз в конце командной строки. Существует также некоторая опция компоновщика" as group", которую вы можете использовать для достижения этого но я не знаю его.


недавно я тоже столкнулся с этим(снова). самым простым решением, которое сработало для меня, было предоставить / перенаправить "malloc" и "free" API на тот, который доступен из SDK, на котором я строил свое приложение.

в основном это происходит из-за отсутствия API управления mem при связывании. как ответили выше упоминает, что _sbrk конкретно здесь отсутствует. БРК/сбрк операции intenrally используется для управления кучей. следовательно, _sbrk, недостающее звено, когда дело доходит до mem API управления.

Я заметил, что добавление-lnosys (i.e libnosys.a) также помог это в некоторой степени в некоторых интеграциях.