[STM32G4] ProcessChar()函数重复定义

[复制链接]
665|11
WHALEE 发表于 2025-8-26 08:10 | 显示全部楼层 |阅读模式
使用STM32CubeMX创建并在STM32CubeIDE环境中编码的项目。我在编译时出现“multiple definition of `ProcessChar'”错误。ProcessChar()函数在两个源文件中都有定义。项目中没有头文件或原型声明会使这些函数成为全局函数。

该错误发生在链接过程中,但我不知道为什么链接器会默认认为这个函数被重复定义。我认为这些函数应该在其各自的翻译单元/源文件中保持局部性,因此链接器应当将它们视为完全不同的函数。



公羊子丹 发表于 2025-8-28 07:18 | 显示全部楼层
这个报错挺典型的,C语言里函数默认是全局作用域,所以两个.c里同名函数会冲突。
周半梅 发表于 2025-8-28 07:19 | 显示全部楼层
如果只是想在文件内部用,可以在函数前加上static,这样作用域就限制在本文件了。
帛灿灿 发表于 2025-8-28 07:20 | 显示全部楼层
你说的“局部性”只有对变量可以用static或者放在函数内部,对函数名不加static就一定是全局的。
童雨竹 发表于 2025-8-28 07:21 | 显示全部楼层
链接器报错就是因为它看到两个目标文件里都定义了ProcessChar,所以不知道该用哪个。
万图 发表于 2025-8-28 07:21 | 显示全部楼层
如果这两个函数功能完全不一样,最好改个不同的名字,避免以后维护时混淆。
Wordsworth 发表于 2025-8-28 07:22 | 显示全部楼层
也可以把它们声明成static inline放在头文件里,这样就算多个.c用到也不会多重定义。
Bblythe 发表于 2025-8-28 07:23 | 显示全部楼层
CubeMX生成代码的时候,有些文件名和函数名是模板化的,你可能在不同模块里写了同名函数。
Pulitzer 发表于 2025-8-28 07:23 | 显示全部楼层
加上static一般就能解决,因为每个.c编译后符号不会导出给链接器了。
Uriah 发表于 2025-8-28 07:24 | 显示全部楼层
记得检查下是不是有头文件里写了函数定义而不是声明,这也是多重定义的常见原因。
Clyde011 发表于 2025-8-28 07:25 | 显示全部楼层
总结就是:同名函数 → 链接器冲突 → static或改名解决,你需要根据用途选择方式。
星辰大海不退缩 发表于 2025-8-28 23:45 | 显示全部楼层
C语言里函数默认是全局作用域
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

57

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部