2016-11-08 11 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によって定義されています。

私は-std=c90-std=c99、または-std=c11のいずれかでコンパイルする場合、私は

error: unknown type name ‘off_t’ 

を取得します。これらのオプションは関連するC標準への適合を指定するので、これは予想されます。これらのC標準に準拠していないCコードをコンパイルするので、これらのオプションを使用しないでください。

私が-std=gnu90,-std=gnu99、または-std=gnu11でコンパイルすると、off_tが定義されています。

#include <sys/types.h> 
#include <unistd.h> 

あなたがそれらを追加する必要があります

はまた、off_tは男ページ私のシステムで、それが必要と言うlseek関数の戻り値の型です。

関連する問題