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

从Ubuntu 20.04升级到22.04后出现gcc multiple definition of错误求解

解决Ubuntu 22.04中全局变量重复定义问题

你遇到的问题根源是在头文件中直接定义全局变量:头文件的包含保护(#ifndef/#define)仅能防止单个源文件重复包含该头文件,但每个包含global.h的.c文件(a.c和b.c)都会各自生成一份int a;和int b;的变量定义,链接阶段就会触发重复定义冲突。

至于Ubuntu 20.04未报错的原因:当时的GCC默认启用-fcommon选项,该选项会自动合并多个文件中重复的全局变量定义;而Ubuntu 22.04的GCC默认使用-fno-common(符合C标准的严格行为),因此会直接报错。

方法一:标准全局变量用法(推荐)

修改global.h,仅声明变量而非定义:

#ifndef GLOBAL_H
#define GLOBAL_H

extern int a;
extern int b;

#endif

随后在任意一个.c文件中定义这两个变量(例如在a.c的main函数前添加):

int a;
int b;

这样整个程序中仅存在一份变量定义,所有源文件通过extern声明共享这两个全局变量。

方法二:临时兼容旧编译行为(不推荐)

若需快速兼容原有代码,可在编译时添加-fcommon选项,让GCC回到Ubuntu 20.04的默认行为:

gcc -O -fcommon a.c b.c

该方法不符合C标准规范,长期使用可能引发潜在问题,不建议在新代码中采用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:03:33