Android NDK编译C代码时报bits/types.h头文件找不到错误
报错根因
Android NDK 自带的C运行库是Bionic,和你Ubuntu环境用的glibc、你参考代码所属的uClibc-ng不是同一套实现。bits/types.h是glibc/uClibc体系下的私有内部头文件,不属于C标准公开接口,Bionic根本没有提供这个路径的头文件,直接引用必然报找不到。
修复方案
按优先级选下面任意一种方案即可:
- 优先用NDK原生接口:你要用到的
ftruncate64函数、__off_t/__off64_t类型,NDK本身已经在公开头文件里提供了,根本不需要移植uClibc的代码。直接删掉#include <bits/types.h>这行,引入<sys/types.h>和<unistd.h>,就可以直接调用ftruncate64,类型也会自动定义好。 - 如果必须用你拿到的那份uClibc的ftruncate64实现:删掉无效的bits头引用,用公开头兼容私有类型即可,修改后的头引用段如下:
#include <jni.h> #include <stdio.h> #include <android/log.h> #include <sys/types.h> // 适配uClibc源码里的私有类型别名 typedef off_t __off_t; typedef off64_t __off64_t;
注意:所有C库的bits目录下的头都是内部实现用的非公开接口,不同C库、不同版本的内容和路径都不兼容,写跨平台代码时永远不要直接引用这个目录下的头。
内容的提问来源于stack exchange,提问作者t0m
相关产品推荐
相关产品推荐

