Ошибки сборки Android для ftello() и fseeko()

Я пытаюсь собрать Android L для 64-битной архитектуры.

Мой код выглядит так:

#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На страницах справочника упоминается, что определение _FILE_OFFSET_BITS со значением 64 превратится off_t в 64-битный тип. Тем не менее я вижу эту ошибку. Я проверил эту ошибку, но не смог найти удовлетворительного ответа.

Будет очень полезно, если кто-нибудь сможет мне помочь с этим.

1 ответ

Я решил аналогичную проблему, указав api на 24 при создании автономного ndk

./make_standalone_toolchain.py --arch arm --api 24 --stl libc++ --install-dir /tmp/ndk

Из файла ndk sysroot/usr/include/stdio.h, это выглядит как ftello только поддержка API больше или равного 24

#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 компилировать условия,

IE каждый #if... должен заканчиваться #endif

Другие вопросы по тегам