Неопределенная ссылка на posix_memalign в ARM GCC - PullRequest
0 голосов
/ 04 декабря 2018

Я использую (STM32F407VG-Discovey board) с компилятором "gcc-arm-none-eabi-7-2017-q4-major" (arm-none-eabi-gcc) и пытаюсь реализовать "планшетные буферы проекта Google».Для этого нужна библиотека времени выполнения malloc.h, а также куча памяти.

Я включаю кучную память на своем процессоре ARM и проверил ее с помощью include и попробую выполнить базовую операцию, вызывающую функцию malloc.Все работает нормально.

Теперь я включил заголовочные файлы Google Flatbuffers, и теперь я получаю сообщение об ошибке "неопределенная ссылка на` posix_memalign '".Мой компоновщик не может найти эту функцию.Он не находит, но он уже должен иметь его posix_memalign в stdlib.h Ошибка выглядит так:

enter image description here

В моемФайл CMake Я установил свои флаги на

SET(CMAKE_C_FLAGS "-mthumb -fno-builtin -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Wall -std=gnu11 -ffunction-sections -fdata-sections -fomit-frame-pointer -mabi=aapcs -fno-unroll-loops -ffast-math -ftree-vectorize -lc -lrdimon" CACHE INTERNAL "c compiler flags")

Также я выясняю, что если я не использую флаги -lc и -lrdimo, там будет неопределенная ссылка на _write (), _read (), _sbrk, _exit .....

Объяснение, почему это не является дубликатом: я знаю, что добавляя библиотеку компоновщика с CMake, вы выполняете команду target_link_libraries ().Проблема здесь в том, что по нетривиальной причине мой лайнер не найдет функцию posix_memalign.Но он найдет другие функции, такие как malloc, alloc, free, ... Все они находятся в "stdlib.h".

1 Ответ

0 голосов
/ 05 декабря 2018

На официальном сайте ARM ToolChain в разделе 6.5.5.Выравнивание кучи памяти C , сказано, что для использования функции `posix_memalign´ вы должны использовать стандарт C99, а не C11, как я установил.

Так что вы должны добавить в свой CMAKE_C_FLAGS этот флаг: -std = c99

Если вы установили флаг -std = c11, вы должны удалить его.

...