STM32项目新增Display驱动调用HAL_DELAY报未定义引用错误求助
问题排查解决方案
1 优先检查函数名大小写
STM32 HAL库原生延时函数命名为HAL_Delay()(D大写,后续elay小写),你代码中调用的HAL_DELAY()为全大写拼写错误,HAL库头文件中不存在该函数声明,HAL库编译产物中也不存在HAL_DELAY对应的符号,自然会抛出未定义引用错误。确认拼写错误的话直接将调用处修改为HAL_Delay(待延时时长)即可解决绝大多数该类问题。
2 若拼写无误,检查Makefile配置
undefined reference属于链接阶段错误,和是否引入头文件无关联,按以下顺序检查配置:
- 检查Makefile中
C_SOURCES变量是否已追加你新增的Core/Src/Display.c,CubeMX生成的Makefile不会自动识别自定义新增的源文件,未手动追加的话Display.c不会参与编译链接,会引发符号匹配失败 - 检查HAL库核心源文件是否在
C_SOURCES列表中,HAL_Delay的实现在stm32g4xx_hal_cortex.c中,确认该文件以及stm32g4xx_hal.c已被正确加入编译列表,缺失的话手动追加即可 - 确认Makefile中预定义宏
USE_HAL_DRIVER已开启,该宏未定义的话HAL库相关符号不会被编译导出,也会引发未定义引用错误
3 其他排查点
- 如果你采用C/C混合编译,检查
Display.h中的函数声明是否用extern "C"包裹,避免C名字修饰机制导致C和C++符号不匹配 - 清理项目目录下所有编译生成的
.o目标文件、.elf可执行文件,执行全量重新编译,避免旧残留编译产物引发的符号异常
内容的提问来源于stack exchange,提问作者Joe Bingham
相关产品推荐
相关产品推荐

