我试图将一些代码从Windows移植到Linux,但我在支持大文件方面遇到了困难。 off_t似乎是在使用-std = c89运行gcc但不是-std = c99运行时定义的。即使是一个微不足道的测试用例也无法编译:
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
int main()
{
off_t x = 0;
return 0;
}
看起来这应该很难(事实上,并非所有其他操作系统都没有)。任何人都知道发生了什么事?
答案 0 :(得分:2)
类型off_t
未由ISO C定义;它由POSIX定义。
我得到了
error: unknown type name ‘off_t’
如果我使用-std=c90
,-std=c99
或-std=c11
进行编译。这是预期的,因为这些选项指定了与相关C标准的一致性。由于您编译的C代码不符合任何C标准,因此您不应该使用这些选项。
如果我使用off_t
,-std=gnu90
或-std=gnu99
进行编译,我发现-std=gnu11
已定义。
此外,off_t
是lseek
函数的返回类型,我的系统上的手册页说它需要:
#include <sys/types.h>
#include <unistd.h>
你应该添加它们。