为什么我会得到隐含的功能声明' open64' /' openat' openat64' Ubuntu警告?

时间:2014-07-24 09:22:41

标签: c linux gcc

gcc 4.8.2

#define __USE_FILE_OFFSET64
#define __USE_LARGEFILE64
#include <fcntl.h>

int
main(void) {
    int fd = open64("/", O_RDONLY);
    return 0;
}

然后gcc的输出是警告:隐式声明函数'open64'[-Wimplicit-function-declaration]&#39;。但是在fcntl.h中:

#ifndef __USE_FILE_OFFSET64
extern int open (const char *__file, int __oflag, ...) __nonnull ((1));
#else
# ifdef __REDIRECT
extern int __REDIRECT (open, (const char *__file, int __oflag, ...), open64)
     __nonnull ((1));
# else
#  define open open64
# endif
#endif
#ifdef __USE_LARGEFILE64
extern int open64 (const char *__file, int __oflag, ...) __nonnull ((1));
#endif

即使添加了#define __USE_ATFILE,函数openat / openat64也会遇到同样的问题。我不知道发生了什么事。

1 个答案:

答案 0 :(得分:5)

LARGEFILE64的正确定义标志是_LARGEFILE64_SOURCE__USE_*已取消features.h所有{{1}}次操作。