Hitomi22 发表于 2025-5-27 23:00

错误未知类型名称 '_ARMABI'

将代码从 Keil 转到 CubeIDE。在编译过程中出现错误未知类型名称 '_ARMABI' 。
_ARMABI在许多头文件中都有定义,包括 Keil 环境中的 stdio.h 和 time.h,
但在 CubeIDE 中找不到它的定义位置。
这是啥情况啊?

公羊子丹 发表于 2025-5-28 07:27

感觉你可能是直接复制了 Keil 的系统头文件进 CubeIDE 里,建议还是用 CubeIDE 自带的标准 C 库。

周半梅 发表于 2025-5-28 07:28

_ARMABI 是 ARM 编译器特有的东西,GCC 根本没这个宏,得换掉相关头文件。

帛灿灿 发表于 2025-5-28 07:29

你是直接搬了 Keil 的工程过来吗?Keil 用的是 ARMCC,CubeIDE 用的是 GCC,两边不兼容。

童雨竹 发表于 2025-5-28 07:29

我也遇到过这种情况,最后是删掉了 Keil 的头文件,改用 newlib 里的 stdio.h 和 time.h 才编过去。

万图 发表于 2025-5-28 07:31

要不你试试换成 <stdio.h> 和 <time.h>,不要用你项目目录下那些带宏定义的 Keil 版本头文件。

Wordsworth 发表于 2025-5-28 07:31

有没有试过点进去报错的那个 _ARMABI 看是在哪个头文件里引入的?看看是不是残留了老的路径。

Bblythe 发表于 2025-5-28 07:32

如果你之前用的是 CMSIS from Keil 的版本,可以试试从 ST 官网下 CubeIDE 用的 CMSIS 包。

Pulitzer 发表于 2025-5-28 07:33

我当时解决方法是从 CubeMX 新建一个空工程,把代码逐个文件迁进去,别直接导原工程。

Uriah 发表于 2025-5-28 07:34

可以试着把编译器设置里的 include path 清理一下,别把 Keil 的东西混进来。

Clyde011 发表于 2025-5-28 07:35

其实就相当于两个平台的 ABI 规范不一样,直接搬肯定报错,得做一轮头文件和库的适配。

elephant00 发表于 2025-5-28 16:27

头文件不兼容?

elephant00 发表于 2025-5-28 16:28

移除或替换_ARMABI宏为GCC兼容的宏如__GNUC__。

jcky001 发表于 2025-5-28 20:00

用GCC兼容的宏。

cr315 发表于 2025-5-28 20:00

更新或替换头文件为GCC工具链的标准头文件。

烟雨蒙蒙520 发表于 2025-5-31 23:07

因为你引用了 ARMCC 专有的头文件或库,而这些在 GCC 环境下不存在或结构不同。

烟雨蒙蒙520 发表于 2025-5-31 23:15

使用 newlib 中的标准 C 库(CubeIDE 默认用的是 newlib)
页: [1]
查看完整版本: 错误未知类型名称 '_ARMABI'