首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >STM CubeIDE 1.9.0有链接问题吗?

STM CubeIDE 1.9.0有链接问题吗?
EN

Stack Overflow用户
提问于 2022-03-09 12:23:42
回答 2查看 2.4K关注 0票数 1

Prolog:我正在使用STM32 CubeIDE开发STM32微控制器的嵌入式应用程序,比如F1系列、F4系列、G0系列和其他一些C。

发生了什么:今天早上,自动更新功能建议我更新到STM CubeID版本1.9.0,我接受了。在更新程序完成后,我打开了当前的项目,并更改了the结构中的一个变量,然后按下"build“按钮。突然之间,链接器报告了许多“多重定义”和“第一个定义在这里”的错误。昨天,这个项目编译得很完美,没有任何CubeIDE版本1.8的问题。

在搜索了一两个小时之后,我可能遗漏了一个分号或那个方向的任何东西,这可能会使整个代码陷入混乱,我得出的结论是,从CubeIDE 1.8.0升级到1.9.0可能是造成此错误的根本原因。

因此,我决定卸载CubeIDE 1.9.0并重新安装1.8.0版本,将项目回滚到昨天晚上的最后一个工作版本(用1.8.0编译),并做了相同的更改,Voila!-一切都很好。

对我来说,看起来是STM搞砸了链接器。有人能证实这种行为吗,还是只有我受了影响?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-09 12:40:36

这是由于编译器的更新。来自STM32CubeIDE的发行说明:

GCC 10默认支持

来自GCC 10发行说明

GCC现在默认为-fno-公共。因此,全局变量访问在各种目标上更有效。在C中,具有多个暂定定义的全局变量现在会导致链接器错误。使用-fcommon,这些定义在链接期间被静默地合并。

此页还有进一步的解释和解决办法:

C中一个常见的错误是在头文件中声明全局变量时忽略了extern。如果头部被多个文件包含,则会导致同一变量的多个定义。在以前的GCC版本中,这个错误被忽略了。GCC 10默认为-fno-公共,这意味着链接器错误将被报告.要解决这个问题,在声明全局变量时,请在头文件中使用extern,并确保每个全局都定义在一个C文件中。如果需要将特定变量的暂定定义放在公共块中,则可以使用__attribute__((__common__))强制这种行为,即使在没有-fcommon的编译代码中也是如此。作为一种解决办法,可以用-fcommon编译遗留C代码,其中所有的暂定定义都应该放在一个公共块中。

票数 5
EN

Stack Overflow用户

发布于 2022-03-12 17:03:14

在Project > Properties > C/C++ build > Settings > gcc编译器>杂项>其他标志中,尝试添加-fcommon,如下所示,以避免STM CubeIDE 1.9中的1k+链接器错误问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71409313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档