2016-11-08 26 views
0

我想將一些代碼從windows移植到linux,但是我很難支持大文件。 off_t似乎在gcc以-std = c89運行但不是-std = c99時定義。即使是微不足道的測試用例不會編譯:off_t與c99的定義

#define _LARGEFILE_SOURCE 
#define _LARGEFILE64_SOURCE 
#define _FILE_OFFSET_BITS 64 
#include <stdio.h> 

int main() 
{ 
    off_t x = 0; 
    return 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> 

您應該添加的。