未能编制15+;用C写的一年前的MUD代码库

未能编制15+;用C写的一年前的MUD代码库,c,gcc,makefile,mud,C,Gcc,Makefile,Mud,在21世纪初,我用这个代码库运行了一个mud,通过它,我自学了一些非常基本的编码 我刚刚从我之前运行服务器的管理员/编码员那里得到了代码库的副本,我几乎可以肯定它会像当年那样编译,但现在不会了 我唯一的猜测是,它与过去15-20年中对GCC的更新有关,但我承认我是一个新手,在这里很不熟悉 这是我在尝试使用make编译它时,在大约100页警告之后得到的错误: [18:24:54] finger.c ... In file included from finger.c:10:0: ../src/in

在21世纪初,我用这个代码库运行了一个mud,通过它,我自学了一些非常基本的编码

我刚刚从我之前运行服务器的管理员/编码员那里得到了代码库的副本,我几乎可以肯定它会像当年那样编译,但现在不会了

我唯一的猜测是,它与过去15-20年中对GCC的更新有关,但我承认我是一个新手,在这里很不熟悉

这是我在尝试使用make编译它时,在大约100页警告之后得到的错误:

[18:24:54] finger.c ...
In file included from finger.c:10:0:
../src/include/merc.h:5149:13: warning: inline function ‘check_toughness’ declared but never defined
 inline int  check_toughness args( ( CD *ch, CD *victim, int dam));
             ^~~~~~~~~~~~~~~
[18:24:54] Linking Executable ...
obj/fight.o: In function `group_gain':
tbw/reloaded/src/fight.c:5514: undefined reference to `xp_compute'
tbw/reloaded/src/fight.c:5516: undefined reference to `xp_compute'
tbw/reloaded/src/fight.c:5518: undefined reference to `xp_compute'
obj/fight.o: In function `one_hit':
tbw/reloaded/src/fight.c:2457: undefined reference to `check_toughness'
obj/mage.o: In function `do_chant':
tbw/reloaded/src/mage.c:345: undefined reference to `check_toughness'
tbw/reloaded/src/mage.c:361: undefined reference to `check_toughness'
tbw/reloaded/src/mage.c:377: undefined reference to `check_toughness'
tbw/reloaded/src/mage.c:393: undefined reference to `check_toughness'
obj/mage.o:tbw/reloaded/src/mage.c:409: more undefined references to `check_toughness' follow
obj/update.o: In function `mobile_update':
tbw/reloaded/src/update.c:756: undefined reference to `werewolf_regen'
obj/powerl.o: In function `do_planarstorm':
tbw/reloaded/src/powerl.c:680: undefined reference to `check_toughness'
collect2: error: ld returned 1 exit status
Makefile:27: recipe for target '../src/reloaded' failed
make: *** [../src/reloaded] Error 1
代码库和引用的文件都是巨大的,所以我认为现在附加它们是没有意义的,但是如果需要的话,我肯定可以提供它们

为了记录在案,像“检查韧性”和“xp计算”这样的函数在这些文件中明确定义了几千个LOC之后


如果您有任何建议,我将不胜感激,谢谢

感谢所有提出建议的人

最简单的答案是:


这可能是代码对内联使用旧的特殊gcc语义的结果。尝试使用--std=gnu89编译(如果您使用的是gcc)


将其添加到Makefile中可以清除所有错误并成功编译。

感谢所有提出建议的人

最简单的答案是:


这可能是代码对内联使用旧的特殊gcc语义的结果。尝试使用--std=gnu89编译(如果您使用的是gcc)


将其添加到生成文件中会清除所有错误并导致编译成功。

应在
.h
文件中定义内联函数。是否将C语言标准设置为类似
C99
?如果在之后定义,则在生成过程中将找不到它们。它们应该在
.C
文件中的
main
函数上方声明,或者在头文件中具有前向声明。您只需删除
inline
关键字即可。如前所述,如果希望内联函数,则函数体需要显示在头文件中。可以这样做,但最简单的方法是去掉
内联
,这样编译器就可以像对待任何其他函数一样对待它。您还必须找出这些函数的定义位置,因为编译器似乎无法找到它们。可能它们是
静态的
或者什么的?这可能是代码使用了
内联
的旧的特殊gcc语义的结果。尝试使用
--std=gnu89
进行编译(如果您使用的是gcc)。应在
.h
文件中定义内联函数。您是否将C语言标准设置为类似于
C99
?如果在之后定义,则在构建过程中将找不到它们。它们应该在
.C
文件中的
main
函数上方声明,或者在头文件中具有前向声明。您只需删除
inline
关键字即可。如前所述,如果希望内联函数,则函数体需要显示在头文件中。可以这样做,但最简单的方法是去掉
内联
,这样编译器就可以像对待任何其他函数一样对待它。您还必须找出这些函数的定义位置,因为编译器似乎无法找到它们。可能它们是
静态的
或者什么的?这可能是代码使用了
内联
的旧的特殊gcc语义的结果。尝试使用
--std=gnu89
编译(如果您使用的是gcc)。