ChromeOS下执行./configure提示缺失arpa/inet.h头文件如何处理
问题解答
1. ./configure搜索头文件的默认路径
autotools生成的configure脚本本质是调用C预处理器完成头文件检测,默认搜索路径优先级从高到低为:
- 编译参数
CPPFLAGS中手动指定的-I开头的路径 - 编译器内置的系统头文件搜索路径,常规类Unix系统默认包含:
/usr/local/include/usr/include- 多架构兼容场景下的架构专属路径,比如
/usr/include/$(gcc -dumpmachine)
- 若配置了交叉编译sysroot,会自动搜索sysroot目录下的上述对应路径
2. 系统中存在头文件但未被识别的排查方法
- 首先全局搜索头文件实际存放路径,执行命令:
sudo find / -name "inet.h" 2>/dev/null | grep arpa - 输出当前编译器的默认头文件搜索路径,对比上述结果是否在搜索范围内,执行命令:
gcc -xc -E -v - - 额外排查ChromeOS环境特性:ChromeOS默认不安装C标准库开发组件,若搜索结果为空,首先确认是否安装了libc对应的开发包。
3. 让configure正确识别头文件的配置方法
- 若头文件存在但在非标准路径,执行configure时手动传入头文件路径参数:
./configure CPPFLAGS="-I/你找到的头文件上级目录路径" # 例如头文件在/opt/share/include/arpa/inet.h,就写CPPFLAGS="-I/opt/share/include" - 若为ChromeOS原生chronos环境,直接安装glibc开发包即可补全缺失的标准头文件:
sudo emerge sys-libs/glibc-dev - 若使用ChromeOS的Crostini Linux容器,对应Debian环境安装libc开发包:
sudo apt install libc6-dev - 若为交叉编译场景,额外指定sysroot路径:
./configure --with-sysroot=/你的交叉编译sysroot路径 CPPFLAGS="-I/对应头文件路径" - 若仍报错可查看编译目录下的
config.log文件,里面会记录头文件检测失败的具体原因(比如权限不足、头文件依赖缺失等)。
内容的提问来源于stack exchange,提问作者Marcelo Lacerda
相关产品推荐
相关产品推荐

