原因: Linux文件内部的偏移指针为有符号的32位整型 int
>man fseeko
SYNOPSIS
#include <stdio.h>
int fseeko(FILE *stream, off_t offset, int whence);
off_t ftello(FILE *stream);
DESCRIPTION
The fseeko() and ftello() functions are identical to fseek() and ftell() (see fseek(3)), respec-
tively, except that the offset argument of fseeko() and the return value of ftello() is of type off_t
instead of long.
On many architectures both off_t and long are 32-bit types, but compilation with
#define _FILE_OFFSET_BITS 64
will turn off_t into a 64-bit type.
Linux可以支持64-bit的文件指针 off_t
方法1:在MakeFile增加 gcc 参数 -D_FILE_OFFSET_BITS=64
方法2:在代码里 #define _FILE_OFFSET_BITS 64
并在代码中将fseek等函数替换为fseeko等。