При попытке кросс-компиляции ICU с помощью android-ndk-r7 в Linux следующая ошибка возникает после настройки при запуске 'make'
__/android-ndk-r7/platforms/android-8/arch-arm/usr/include/sys/types.h:124: error: 'uint64_t' does not name a type
Это вызвано #include в icu / source / common / unicode / ptypes.h: 25. Похоже, что это не проблема icu в Android-ndk-n7. В sys / types.h мы видим
#ifdef __BSD_VISIBLE
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef uint32_t u_int32_t;
typedef uint16_t u_int16_t;
typedef uint8_t u_int8_t;
typedef uint64_t u_int64_t;
#endif
Здесь используется код uint64_t, определенный в #include в верхней части файла sys / types.h. Здесь мы видим
#if !defined __STRICT_ANSI__ || __STDC_VERSION__ >= 199901L
# define __STDC_INT64__
#endif
...
#if defined(__STDC_INT64__)
typedef __int64_t int64_t;
typedef __uint64_t uint64_t;
#endif
Если STRICT_ANSI или STDC_VERSION и, следовательно, STDC_INT64 никогда не будут определены, в том числе sys / types.h выдаст ошибку, так как uint64_t никогда не определяется. Любой код, который позже вызывает либо int64_t (происходит в коде icu), либо uint64_t, также выдаст ту же ошибку. Мое временное исправление для этого - определить STDC_INT64 в верхней части icu ptypes.h прямо перед #include . Это плохая идея?