[英]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.