错误未知类型名称 '_ARMABI'
将代码从 Keil 转到 CubeIDE。在编译过程中出现错误未知类型名称 '_ARMABI' 。_ARMABI在许多头文件中都有定义,包括 Keil 环境中的 stdio.h 和 time.h,
但在 CubeIDE 中找不到它的定义位置。
这是啥情况啊?
感觉你可能是直接复制了 Keil 的系统头文件进 CubeIDE 里,建议还是用 CubeIDE 自带的标准 C 库。 _ARMABI 是 ARM 编译器特有的东西,GCC 根本没这个宏,得换掉相关头文件。 你是直接搬了 Keil 的工程过来吗?Keil 用的是 ARMCC,CubeIDE 用的是 GCC,两边不兼容。 我也遇到过这种情况,最后是删掉了 Keil 的头文件,改用 newlib 里的 stdio.h 和 time.h 才编过去。 要不你试试换成 <stdio.h> 和 <time.h>,不要用你项目目录下那些带宏定义的 Keil 版本头文件。 有没有试过点进去报错的那个 _ARMABI 看是在哪个头文件里引入的?看看是不是残留了老的路径。 如果你之前用的是 CMSIS from Keil 的版本,可以试试从 ST 官网下 CubeIDE 用的 CMSIS 包。 我当时解决方法是从 CubeMX 新建一个空工程,把代码逐个文件迁进去,别直接导原工程。 可以试着把编译器设置里的 include path 清理一下,别把 Keil 的东西混进来。 其实就相当于两个平台的 ABI 规范不一样,直接搬肯定报错,得做一轮头文件和库的适配。 头文件不兼容? 移除或替换_ARMABI宏为GCC兼容的宏如__GNUC__。 用GCC兼容的宏。 更新或替换头文件为GCC工具链的标准头文件。 因为你引用了 ARMCC 专有的头文件或库,而这些在 GCC 环境下不存在或结构不同。 使用 newlib 中的标准 C 库(CubeIDE 默认用的是 newlib)
页:
[1]