【发布时间】:2019-05-05 23:22:32
【问题描述】:
我正在使用(STM32F407VG-Discovey board)和编译器“gcc-arm-none-eabi-7-2017-q4-major”(arm-none-eabi-gcc),我正在尝试实现“google project flatbuffers” ”。这需要运行时库 malloc.h 和堆内存。
我在我的 ARM 处理器上打开堆内存并使用 include 测试它,并尝试调用 malloc 函数的基本操作。一切正常。
现在我包含 google flatbuffers 头文件,现在我收到错误“未定义对 `posix_memalign' 的引用”。我的链接器找不到这个函数。它没有找到,但它应该已经有了它posix_memalign in stdlib.h 错误看起来像这样:
在我的 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”中。
【问题讨论】:
-
不,这根本不是重复的。我知道您可以通过这种方式调用 target_link_libraries() 并将标志添加到链接器,但这不是必需的。但这不是我试图解决的问题。
-
在链接器的调用命令行中排序库可能有问题。如果您知道
CMAKE_C_FLAGS不是链接库的正确方式,那您为什么要在代码中使用它并向我们展示该代码? -
我能问一下为什么我的问题得到了反对票吗?我知道这是一个具体且有点不清楚的问题,但是,为什么?
标签: c cmake arm stm32 cortex-m