You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将ASN1C生成代码从PC移植到STM32(ARM)时遇链接错误

解决Keil中__stdin/__stdout重复定义的链接错误

问题根源

链接错误显示stdio_streams.o和utils_stm32.o两个目标文件都定义了__stdin和__stdout符号,导致冲突。该问题和ASN1C生成的代码无关,是项目中现有文件的标准IO符号重复定义导致。

具体修复方案

方案1:修改自定义工具文件的符号声明

打开utils_stm32.c,查找其中__stdin和__stdout的定义代码,通常类似:

FILE __stdin;
FILE __stdout;

将其改为外部声明,避免重复定义:

extern FILE __stdin;
extern FILE __stdout;

方案2:排除冗余文件的编译

如果其中一个文件的标准IO实现是多余的:

  • 打开Keil项目管理器,找到冲突文件(stdio_streams.c或utils_stm32.c)
  • 右键该文件,选择Options for File...
  • 在Properties标签页中取消勾选Include in Build,跳过该文件的编译

方案3:调整编译器标准库配置

ARMCC编译器的标准库选项可能自带标准IO符号定义:

  • 打开项目Options for Target...
  • 切换到Target标签页,切换Use MicroLIB的勾选状态(勾选/取消),尝试解决冲突
  • 检查Editor->Configuration中的标准库路径,确保无重复引用

方案4:重新生成ASN1C代码时禁用标准IO依赖

重新生成ASN1C代码时添加-no-stdio参数,禁止生成依赖标准IO的代码,避免引入额外的标准IO符号。

内容的提问来源于stack exchange,提问作者Pablo Vicedo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:07:15