为Matrice400开发的DJI PSDK在uVision5中编译失败,无法切换至ARMCC编译器
针对GD32F527 + DJI PSDK + Keil uVision5编译器切换问题的解决方法
彻底清理ARMCLANG关联配置
- 按Alt+F7打开项目的
Options for Target,切换到Target标签页,将Code Generation里的编译器手动指定为ARM Compiler 5.06 update 6 (build 750),不要选择带ARMCLANG的选项 - 转到
Build Output标签页,检查所有工具路径,确保汇编器、链接器等都指向ARMCC_750目录下的对应工具(armcc.exe、armasm.exe等),而非ARMCLANG的路径 - 找到项目根目录的
.uvprojx文件,用文本编辑器搜索所有包含ARMCLANG的字段,直接删除或替换为ARMCC相关配置,保存后重新打开项目
- 按Alt+F7打开项目的
手动配置编译器环境变量
- 将ARMCC_750的安装路径(比如
C:\Keil_v5\ARM\ARMCC\5.06u6)添加到系统环境变量PATH的最前端,确保系统优先调用该版本的ARM工具链 - 在Keil的
Manage Project Items -> Folders/Extensions中,移除所有ARMCLANG相关的编译器条目,只保留ARMCC 5.06u6,然后重启Keil
- 将ARMCC_750的安装路径(比如
新建纯净GD32项目再迁移PSDK代码
- 用GD32官方提供的Keil模板新建一个针对GD32F527ZMT7的空白项目,确保项目默认使用ARMCC编译器(如果模板自带ARMCLANG,按第一个方法修改配置)
- 逐步迁移PSDK的代码文件、头文件路径、链接脚本到新项目中,不要直接复制原项目的配置文件,避免残留ARMCLANG的配置
检查PSDK库的兼容性补丁
- 由于PSDK官方只提供STM32的教程,针对GD32需要手动修改PSDK库中的部分编译选项:
- 打开PSDK库的头文件或配置脚本,将所有针对STM32的编译器宏定义(如
__STM32F4xx__)替换为GD32对应的宏(__GD32F527__) - 检查PSDK库中的汇编文件,确保使用的是ARMCC兼容的汇编语法,而非ARMCLANG的语法
- 打开PSDK库的头文件或配置脚本,将所有针对STM32的编译器宏定义(如
- 由于PSDK官方只提供STM32的教程,针对GD32需要手动修改PSDK库中的部分编译选项:
强制指定工具链路径
- 在
Options for Target -> User标签页中,手动添加编译前的批处理命令:set PATH=C:\Keil_v5\ARM\ARMCC\5.06u6;%PATH% - 这样每次编译前都会强制让系统使用指定版本的ARMCC工具链,避免调用ARMCLANG
- 在
内容的提问来源于stack exchange,提问作者dansyw91




