首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在为android编译lib引信时‘'sizeof(off_t) != 8’

在为android编译lib引信时‘'sizeof(off_t) != 8’
EN

Stack Overflow用户
提问于 2017-07-17 15:30:44
回答 2查看 691关注 0票数 3

我正在尝试用NDK编译锂熔断器,我的环境:

Win10(64位)+NDK(r14b,64位)+lib引信(3.1.0)

错误发生在fuse_common.h中,它检查off_t的大小

代码语言:javascript
复制
$ 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

这是fuse_common.h的支票

代码语言:javascript
复制
struct _fuse_off_t_must_be_64bit_dummy_struct \
    { unsigned _fuse_off_t_must_be_64bit:((sizeof(off_t) == 8) ? 1 : -1); };

我在谷歌上搜索,有_FILE_OFFSET_BITS=64定义,可以用来改变off_t的大小,我定义了'Android.mk‘文件:

代码语言:javascript
复制
LOCAL_CFLAGS := \
    ....
    -D_FILE_OFFSET_BITS=64 \
    ....

甚至在fuse_common.h的开头添加这一行

代码语言:javascript
复制
#define _FILE_OFFSET_BITS 64

还不起作用,怎么修呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-17 20:01:11

注意到提供的解决方案非常类似于解决方案,请参见@Dan的答案,以获得64位off_t的可靠和正式的方法。

在Android上,off_t总是32位长,而且没有预处理器宏来控制它的大小。(尽管它只适用于NDK开发,因为现代仿生允许在编译时配置off_t大小)。正因为如此,您无法直接编译库。

但我想有办法解决这个问题。Android提供了非POSIX扩展类型- off64_t,并且它还提供了一组互补的库函数来接受它,而不是off_t。它们由64后缀( lseek64()mmap64() )来区别。因此,要使工作顺利,您可以尝试将全局配置头添加到项目中:

代码语言:javascript
复制
/* let off_t to be a 64-bit length */
typedef off64_t off_t;

/* use appropriate versions of system functions */
/* list here only functions that have off_t parameters and are used by your library */
#define mmap mmap64
#define lseek lseek64

当然,请记住,编译后的代码现在是针对*64()函数而不是常规函数链接的,任何公共接口都希望使用off64_t而不是off_t

票数 0
EN

Stack Overflow用户

发布于 2017-08-03 20:42:37

更新到NDK r15c。_FILE_OFFSET_BITS=64从那里开始工作。

请注意,大多数off64_t系统调用直到Androd-21才可用。如果您的minSdkVersion设置在此下面,并且使用_FILE_OFFSET_BITS=64,那么许多函数将不可用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45148151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档