5

我正在尝试为 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

我检查了fseekoand ftello,在手册页上提到_FILE_OFFSET_BITS用值 64 定义将off_t变成 64 位类型。我仍然看到这个错误。我检查了这个错误,但找不到任何令人满意的答案。

如果有人可以帮助我,那将非常有帮助。

4

2 回答 2

1

我通过在创建独立 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 */
于 2019-07-08T11:42:40.557 回答
0

第一个#if应用于整个发布的代码,而不仅仅是下一行。

其他类似的条件存在#if#else编译条件,

IE 每个#if... 必须以#endif

于 2015-10-07T14:53:25.683 回答