0

我试图在 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

从我收集到的信息来看,这意味着头文件中包含变量声明,并且 usingstatic是一个简单的修复方法,但是,我无法弄清楚我应该在代码中的哪个位置放置该关键字来修复这个问题. 以下是bllmaxmerc.h中唯一提到的:

int bllmax, crbmax, crnmax, srpmax, mngmax;

是我要编译的程序。

4

1 回答 1

0

您需要了解声明定义之间的区别。声明告诉编译器该符号存在于某处但可能不在此处。定义告诉编译器该符号存在于此处

您显示的行(没有任何上下文)正在定义变量,这意味着它们将在包含头文件的每个源文件中定义。

它应该做的是声明变量,这可以通过使它们来完成extern

extern int bllmax, crbmax, crnmax, srpmax, mngmax;

然后在单个源文件中定义变量(不带extern)。

于 2021-07-17T16:00:14.327 回答