Keil5编译——Error: L6218E: Undefined symbol

允我心安 提交于 2020-02-11 12:39:01

1.具体问题

在初学RTThread着手最基础的——动态内存分配线程来控制LED闪烁。keil5编译时遇到以下的错误提示:

STM32L431RC_BearPiLED\STM32L431RC_BearPiLED.axf: Error: L6218E: Undefined symbol rt_system_heap_init (referred from board.o).

2.问题分析

猜想:

undefined,rt_system_heap_init,这两个关键词说明error与函数定义或者声明缺失有关,而且这个函数也的确是后面加上,忽略了在定义函数的.c文件进行定义或.h进行声明也是有可能的。

进一步:

找到函数调用的地方`

#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
    rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif

顺着函数查看函数的声明时发现——函数在rtthread.h文件进行声明,具体如下,到这里便可以确定错误的原因是调用函数缺少声明!原因是我的 RT_USING_HEAP 宏定义定义在另外一处地方,导致此处无法触发条件编译,进而缺少函数声明,所以链接时出现问题。

#ifdef RT_USING_HEAP
/*
 * heap memory interface
 */
void rt_system_heap_init(void *begin_addr, void *end_addr);
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!