Keil5编译——Error: L6218E: Undefined symbol

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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用[1]和引用的描述,"Error: L6218E: Undefined symbol Delay(unsigned) (referred from main.o)"是由于在编译时找不到名为Delay(unsigned)的符号导致的错误。这个错误通常发生在移植代码时,缺少了相关的函数定义或链接库。 解决这个错误的方法有以下几种: 1. 确保移植的代码中包含了Delay(unsigned)函数的定义或声明。检查移植的代码中是否有相关的函数定义或声明,如果没有,需要将该函数的定义或声明添加到代码中。 2. 检查编译器的链接设置。在Keil中,可以通过打开项目的选项对话框,然后选择“链接”选项卡来检查链接设置。确保链接设置中包含了Delay(unsigned)函数所在的库文件或对象文件。 3. 检查编译器的搜索路径。在Keil中,可以通过打开项目的选项对话框,然后选择“搜索路径”选项卡来检查搜索路径设置。确保搜索路径中包含了Delay(unsigned)函数所在的库文件或对象文件的路径。 4. 检查库文件是否正确引入。如果使用了外部库文件,需要确保库文件正确引入到项目中,并且链接设置中包含了库文件的路径。 5. 检查函数命名和参数是否正确。确保函数的命名和参数与调用该函数的地方一致,包括大小写和参数类型。 请注意,具体的解决方法可能因为你的具体情况而有所不同。建议你根据具体的错误信息和代码进行排查和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值