你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Eclipse环境STM32工程编译报错undefined references to `assert_failed'

[复制链接]
汇诚李老师 提问时间:2023-3-1 16:50 / 已解决

用Eclipse环境创建一个STM32F407工程。编译时出现错误。c:/program files (x86)/gnu arm embedded toolchain/9 2020-q2-update/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/bin/ld.exe: C:\Users\Huicheng\eclipse-workspace\Excise-F407\F407STDLibraryProject\Debug/../STM32F4xx_StdPeriph_Driver/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c:188: undefined reference to assert_failed' c:/program files (x86)/gnu arm embedded toolchain/9 2020-q2-update/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/bin/ld.exe: C:\Users\Huicheng\eclipse-workspace\Excise-F407\F407STDLibraryProject\Debug/../STM32F4xx_StdPeriph_Driver/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c:189: undefined reference toassert_failed' c:/program files (x86)/gnu arm embedded toolchain/9 2020-q2-update/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/bin/ld.exe: C:\Users\Huicheng\eclipse-workspace\Excise-F407\F407STDLibraryProject\Debug/../STM32F4xx_StdPeriph_Driver/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c:190: undefined reference to assert_failed' c:/program files (x86)/gnu arm embedded toolchain/9 2020-q2-update/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/bin/ld.exe: C:\Users\Huicheng\eclipse-workspace\Excise-F407\F407STDLibraryProject\Debug/../STM32F4xx_StdPeriph_Driver/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c:208: undefined reference toassert_failed' c:/program files (x86)/gnu arm embedded toolchain/9 2020-q2-update/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/bin/ld.exe: ./STM32F4xx_StdPeriph_Driver/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.o:C:\Users\Huicheng\eclipse-workspace\Excise-F407\F407STDLibraryProject\Debug/../STM32F4xx_StdPeriph_Driver/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c:215: more undefined references to `assert_failed' follow collect2.exe: error: ld returned 1 exit status。

检查stm32f4xx_gpio.c,stm32f4xx_gpio.h,.定义有。为什么报错

收藏 评论1 发布时间:2023-3-1 16:50

举报

1个回答
STMCU-管管 最优答案 回答时间:2024-7-29 17:44:06
  1. 函数声明与定义不匹配
    • 确保assert_failed函数在头文件中声明的方式与在源文件中的定义完全一致。
  2. 编译问题
    • 可能是源文件stm32f4xx_gpio.c没有被正确编译。检查是否所有需要的源文件都被包含在了项目中,并且没有编译错误。
  3. 链接顺序问题
    • 如果assert_failed在另一个库或源文件中定义,需要确保它在链接过程中出现在stm32f4xx_gpio.c之前。
  4. 项目配置问题
    • 检查Eclipse的项目管理配置,确保所有需要的库和源文件都被包含在编译和链接路径中。
  5. 分散加载问题
    • 如果使用分散加载(scatter-loading),确保分散文件(scatter file)正确指定了各个段的布局,并且所有需要的代码都被包含在内。
  6. 头文件包含问题
    • 确保在调用assert_failed的源文件中包含了定义该函数的头文件。
  7. 命名冲突或隐藏
    • 如果有多个具有相同名称的函数或变量,可能会导致链接器混淆。检查是否有命名冲突。
  8. 链接器脚本问题
    • 如果使用自定义的链接器脚本,确保脚本正确处理了所有对象文件和库。
  9. 编译器/链接器版本不兼容
    • 确保使用的编译器和链接器与你的项目设置和代码库兼容。
  10. 清理和重建
    • 尝试在Eclipse中执行“Clean Project”然后“Rebuild Project”,以确保所有文件都被重新编译和链接。
  11. 检查外部依赖
    • 如果assert_failed函数依赖于外部库或特定的编译器特性,确保这些依赖已经正确解决。
  12. Eclipse CDT设置
    • 检查Eclipse CDT的设置,确保编译器和链接器的路径、标志和配置正确无误。

如果上述步骤都不能解决问题,你可以尝试以下操作:

  • 使用Eclipse的“Project”菜单中的“Build Project”或“Clean...”选项来清理和重建项目。
  • 检查Eclipse的错误日志和问题视图,获取更详细的信息。
  • 确保Eclipse使用的是与你的代码库兼容的ARM工具链版本
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版