我正在尝试在 Ubuntu 机器上运行 make 来编译 RoT MUD,但我得到的最远的是当我得到 collect2: error: ld returned 1 exit status
时。
这是在终端中的错误之前发生的事情(以及许多其他类似的错误):
/usr/bin/ld: obj/wizlist.o:/home/lucas/Projects/R2b5/src/merc.h:3355: multiple definition of `bllmax'; obj/act_comm.o:/home/lucas/Projects/R2b5/src/merc.h:3355: first defined here
据我所知,这意味着头文件中包含变量声明,使用 static
很容易解决,但是,我无法弄清楚应该把它放在哪里代码中的关键字来解决这个问题。以下是merc.h 中唯一提到的bllmax
:
int bllmax, crbmax, crnmax, srpmax, mngmax;
Here 是我要编译的程序。
答案 0 :(得分:0)
您需要了解声明和定义之间的区别。 声明告诉编译器该符号存在于某处,但可能不存在于此。 定义告诉编译器符号存在于此处。
您显示的行(没有任何上下文)是定义变量,这意味着它们将在包含头文件的每个源文件中定义。
它应该做的是声明变量,这可以通过使它们Failed to create client: dialing: google: error getting credentials using GOOGLE_APPLICATION_CREDENTIALS environment variable: open /build/app/repositories/firebase-services.json: not a directory
:
extern
然后在单个源文件中定义变量(不带 extern int bllmax, crbmax, crnmax, srpmax, mngmax;
)。