繁体   English   中英

错误:“ atoll”的类型冲突

[英]error: conflicting types for ‘atoll’

我正在尝试调试,以便可以托管游戏服务器,这是我遇到的下一个错误。 我仅在Linux上使用了很短的时间,却不知道从这里开始应该走什么路。

这是我正在使用的错误:

server $ make
gcc -Wall -Wshadow -Wno-pointer-sign -O3 -g -fno-strict-aliasing -m32     -DSTAFF -o .obj/server.o -c server.c
In file included from server.c:57:0:
tool.h:24:20: error: conflicting types for ‘atoll’
 unsigned long long atoll(char *string);
                    ^
In file included from /usr/include/features.h:374:0,
                 from /usr/include/stdio.h:27,
                 from server.c:32:
/usr/include/stdlib.h:292:1: note: previous definition of ‘atoll’ was here
 __NTH (atoll (const char *__nptr))
 ^
make: *** [.obj/server.o] Error 1

atoll是标准的C库函数,在C99中引入的<stdlib.h>声明。

它的声明是:

long long int atoll(const char *nptr);

显然,您正在编译的软件具有一个名为tool.h的头文件,该头文件声明:

unsigned long long atoll(char *string);

该声明是不正确且不必要的。 如果基础实现不支持它,则显式声明atoll可能是有意义的,但是至少应该正确声明它-如果<stdlib.h>已经声明它,则根本不应该声明它。

您正在构建的软件是错误的或配置错误的。 如果您可以识别该软件(它是一个开源软件包吗?),我们可以看一下。 或者,您可以联系作者并指出此问题。

根据一些评论,您可能正在尝试构建Astonia。 我自己下载了源代码,但它报告了您的问题(尽管行号不同;也许您未构建最新版本)。 源声明但未定义atoll函数。 注释掉声明应该解决这个特定问题,尽管可能还有其他问题。 您应该联系作者

atoll()是C ++标准库(stdlib)转换函数。

您似乎在两个不同的头文件中找到了两个不同的定义。 为什么您的server.c使用#include# server.c头文件.h文件的两个冲突链?

许多C和C ++开源软件包都有./configure命令。 如果有该命令,是否应该重新运行该命令?

我假设我知道您要构建什么,因为我自己经历了这个过程,并且看到了完全相同的错误。 问题是,此代码是大约十年前在32位linux上构建的,并且不存在这种冲突。 现在,您(我的另一个假设)试图在64位linux上构建它,并且发生了冲突。 我没有C可以通过更改代码来解决此问题,但是,如果您尝试在32位版本的linux上构建它,它将可以正常工作。

还要说,如果您坚持在64位系统上解决此问题的方法,那将不是最后的麻烦。 当32位MySQL片段在构建过程中被击中而在64位系统上不存在时,您将碰壁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM