aj3*_*423 2 c android fuse android-ndk
我正在尝试使用 NDK编译libfuse,我的环境:
Win10(64bit) + NDK(r14b,64bit) + libfuse(3.1.0)
在fuse_common.h 中发生错误,它检查以下大小off_t:
$ ndk-build
[armeabi-v7a] Compile thumb : fuse <= buffer.c
In file included from jni/../../libfuse/lib/buffer.c:15:
In file included from jni/../../libfuse/lib/fuse_i.h:9:
In file included from jni/../../libfuse/include\fuse.h:19:
jni/../../libfuse/include/fuse_common.h:745:13: error: bit-field
'_fuse_off_t_must_be_64bit' has negative width (-1)
{ unsigned _fuse_off_t_must_be_64bit:((sizeof(off_t) == 8) ? 1 : -1); };
^
1 error generated.
make: *** [obj/local/armeabi-v7a/objs/fuse/__/__/libfuse/lib/buffer.o] Error 1
Run Code Online (Sandbox Code Playgroud)
这是在fuse_common.h 中的检查:
struct _fuse_off_t_must_be_64bit_dummy_struct \
{ unsigned _fuse_off_t_must_be_64bit:((sizeof(off_t) == 8) ? 1 : -1); };
Run Code Online (Sandbox Code Playgroud)
我在谷歌上搜索,有_FILE_OFFSET_BITS=64定义,可用于更改 的大小off_t,我定义了我的“Android.mk”文件:
LOCAL_CFLAGS := \
....
-D_FILE_OFFSET_BITS=64 \
....
Run Code Online (Sandbox Code Playgroud)
甚至在fuse_common.h的开头添加这一行
#define _FILE_OFFSET_BITS 64
Run Code Online (Sandbox Code Playgroud)
还是不行,怎么解决?
更新到 NDK r15c。_FILE_OFFSET_BITS=64从那里开始工作。
请注意,大多数off64_t系统调用直到 android-21 才可用。如果您minSdkVersion的设置低于该值并且您使用_FILE_OFFSET_BITS=64,则许多功能将不可用。