make: *** [Drivers/STM32F1xx_HAL_Driver/Src/subdir.mk:49: Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.o] Error 87 make: *** Waiting for unfinished jobs....怎么解决
时间: 2025-05-26 10:39:26 浏览: 41
### STM32F1xx_HAL_Driver 编译错误分析
在处理 `STM32F1xx_HAL_Driver` 的编译过程中,如果遇到 `Error 87` 并且涉及文件如 `stm32f1xx_hal_exti.o` 和 `subdir.mk`,这通常表明存在配置或依赖项方面的问题。以下是可能的原因以及解决方案:
#### 可能原因一:宏定义冲突
某些情况下,`STM32 HAL Driver` 中的头文件可能存在重复定义或者未正确定义的关键字。例如,在 `stm32f1xx_hal_conf.h` 文件中,如果没有正确设置外设的相关选项,可能会引发此类错误。
建议检查以下内容:
- 确认 `stm32f1xx_hal_conf.h` 是否被正确包含并修改。
- 如果项目中有自定义的宏定义,请确保它们不会与标准库中的宏发生冲突[^1]。
#### 解决方案代码示例
```c
// 在 stm32f1xx_hal_conf.h 中确认是否启用了 EXTI 外设支持
#define USE_FULL_ASSERT 0 // 或者根据需求调整此值
```
---
#### 可能原因二:Makefile 配置不匹配
`make` 工具链中的 `subdir.mk` 文件负责管理目标对象文件(如 `.o` 文件)的生成过程。如果该文件未能正确识别源文件路径或链接器脚本,则可能导致类似的错误。
具体操作如下:
- 打开项目的根目录下的 `Makefile` 文件,查找是否存在针对 `stm32f1xx_hal_exti.c` 的编译规则。
- 确保所有必要的源文件均已列入编译列表中,并验证其相对路径无误[^2]。
#### Makefile 调整实例
```makefile
# 添加缺失的目标文件到 SRCS 定义中
SRCS += \
Src/stm32f1xx_hal_msp.c \
Src/stm32f1xx_hal_gpio.c \
Src/stm32f1xx_hal_exti.c
```
---
#### 可能原因三:工具链版本兼容性问题
有时,使用的 GCC ARM 工具链版本较旧或过新都可能引起编译失败。特别是当工具链更新后引入了新的语法检查机制时,一些原本可以忽略的小瑕疵会被标记为严重错误。
推荐措施包括:
- 更新至最新稳定版的 GNU Arm Embedded Toolchain。
- 使用 `-Wall -Wextra` 参数重新运行编译命令以捕获潜在警告信息[^3]。
#### 命令行调试技巧
```bash
arm-none-eabi-gcc --version
make clean && make all CFLAGS="-Og -ggdb -Wall -Wextra"
```
---
#### 总结
通过以上方法逐一排查,应能找到导致 `Error 87` 的根本原因。无论是由于宏定义不当还是构建环境配置失误,均需仔细核对相关文档资料来解决问题。
阅读全文
相关推荐


















