如果有人能帮我这个忙,那就太好了。
结尾
我正在尝试为64位架构构建Android L。
我的代码是这样的:#if (HAS_LARGE_FILE_SUPPORT)
#define _FILE_OFFSET_BITS 64 //Defined in header file
/*Some File operations*/
#if HAS_LARGE_FILE_SUPPORT
return fseeko(iFile, offset, seekmode);
#else
return fseek(iFile, offset, seekmode);
/*Some File operations*/
#if HAS_LARGE_FILE_SUPPORT
return ftello(iFile, offset, seekmode);
#else
return ftell(iFile, offset, seekmode);
我得到低于ftello
和fseeko
的错误:
error: call to 'ftello' declared with attribute error: not available with _FILE_OFFSET_BITS=64
error: call to 'fseeko' declared with attribute error: not available with _FILE_OFFSET_BITS=64
我检查了fseeko
和ftello
,在手册页上提到用64的值定义_FILE_OFFSET_BITS
会把off_t
变成64位类型。我仍然看到这个错误。我检查了这个错误,但没有找到任何令人满意的答案。
我通过在创建独立ndk时将api指定为24来解决类似的问题
./make_standalone_toolchain.py --arch arm --api 24 --stl libc++ --install-dir /tmp/ndk
从ndk文件sysroot/usr/include/stdio.h
来看,ftello
只支持大于等于24的api
#if __ANDROID_API__ >= 24
int fgetpos(FILE* __fp, fpos_t* __pos) __RENAME(fgetpos64) __INTRODUCED_IN(24);
int fsetpos(FILE* __fp, const fpos_t* __pos) __RENAME(fsetpos64) __INTRODUCED_IN(24);
int fseeko(FILE* __fp, off_t __offset, int __whence) __RENAME(fseeko64) __INTRODUCED_IN(24);
off_t ftello(FILE* __fp) __RENAME(ftello64) __INTRODUCED_IN(24);
#endif /* __ANDROID_API__ >= 24 */
第一个#if
将应用于整个发布的代码,而不仅仅是下一行。
其他#if
和#else
编译条件也存在类似的条件,
即每个#if
…必须以#endif