Linux MIPS64平台编译GCC 8.5.0遇bits/wordsize.h缺失错误
bits/wordsize.h缺失错误的排查与解决 问题描述
编译执行步骤
./contrib/download_prerequisites ./configure --prefix=/usr/local/gcc-8.5.0 --enable-language=c,c++ --disable-multilib --with-abi=64 make -j$(nproc)
编译报错信息
In file included from /usr/include/features.h:367,
from /usr/include/stdio.h:27,
from ../.././libgcc/../gcc/tsystem.h:87,
from ../.././libgcc/libgcc2.c:27:
/usr/include/sys/cdefs.h:410:10: fatal error: bits/wordsize.h: No such File
#include <bits/wordsize.h>
^~~~~~~~~~~~~~~~~
compilation terminated.
...
make[3]: Leaving directory '/root/gcc-8.5.0/mips64el-unknown-linux-gnu/libgcc'
Makefile:21583: recipe for target 'all-stage1-target-libgcc' failed
make[2]: *** [all-stage1-target-libgcc] Error 2
make[2]: Leaving directory '/root/gcc-8.5.0'
Makefile:26484: recipe for target 'stage1-bubble' failed
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory '/root/gcc-8.5.0'
Makefile:949: recipe for target 'all' failed
make: *** [all] Error 2
现状确认
bits/wordsize.h实际存在于/usr/include/mips64el-linux-gnu/bits/目录下。
原因分析
该问题源于交叉编译时头文件搜索路径未正确指向目标架构的专属头文件目录:
- 编译MIPS64el架构的GCC时,编译器默认优先搜索
/usr/include下的通用头文件,但bits/wordsize.h是与架构强绑定的文件,仅存在于目标架构的专属子目录中。 - 配置参数
--disable-multilib会关闭多架构支持逻辑,导致系统无法自动识别并添加目标架构的头文件搜索路径,进一步引发文件找不到的问题。
解决方法
方法1:重新配置时指定目标架构头文件路径
清理原有编译产物后,通过configure参数强制指定目标架构的头文件目录:
# 清理编译残留 make clean && rm -rf config.cache # 重新配置,指定目标架构头文件根目录 ./configure --prefix=/usr/local/gcc-8.5.0 --enable-language=c,c++ --disable-multilib --with-abi=64 --with-native-system-header-dir=/usr/include/mips64el-linux-gnu # 或者通过CPPFLAGS直接添加包含路径 # CPPFLAGS="-I/usr/include/mips64el-linux-gnu" ./configure --prefix=/usr/local/gcc-8.5.0 --enable-language=c,c++ --disable-multilib --with-abi=64 # 重新编译 make -j$(nproc)
方法2:创建软链接临时补全路径
如果不想重新配置,可直接在通用头文件目录下创建软链接,指向目标架构的bits目录:
ln -s /usr/include/mips64el-linux-gnu/bits /usr/include/bits
执行后重新运行make -j$(nproc)即可。注意:此方法可能影响其他架构的编译工作,GCC编译完成后建议删除该软链接。
方法3:安装目标架构的标准库开发包
确保已安装MIPS64el架构的glibc开发包,系统会自动识别并添加正确的头文件路径:
# Debian/Ubuntu系统 apt-get install libc6-dev-mips64el-cross # RHEL/CentOS系统 yum install glibc-devel-mips64el
安装完成后重新执行配置和编译步骤即可。
内容的提问来源于stack exchange,提问作者zhiming wen

