构建独立环境GCC交叉编译器时包含<cstddef>报__float128不支持错误的解决方法
解决i686-elf交叉编译器中引发的__float128不支持错误
问题原因
i686-elf目标架构本身不支持__float128扩展类型,但你构建的交叉编译器中,libstdc++的头文件(被<cstddef>间接引用)包含了针对__float128的条件编译代码,导致编译时弹出错误提示——尽管不影响最终编译完成,但需要消除该提示。
解决方案
方案1:重新编译交叉编译器(根源解决)
修改GCC的configure配置,明确告知目标架构禁用__float128支持,步骤如下:
- 进入之前的build-gcc目录,清理旧编译产物:
cd build-gcc make clean
- 重新执行configure命令,添加目标编译选项:
../gcc/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers --disable-hosted-libstdcxx --with-target-cflags="-mno-float128" --with-target-cxxflags="-mno-float128"
- 重新编译并安装:
make all-gcc make all-target-libgcc make all-target-libstdc++-v3 make install-gcc make install-target-libstdc++-v3
方案2:编译应用时临时屏蔽错误(快速 workaround)
如果不想重新编译编译器,可以在编译自己的程序时,添加宏定义来屏蔽__float128相关代码。例如,在编译命令中加入:
-D__float128=long double
或者更彻底的定义:
-D__SIZEOF_FLOAT128__=0 -D__float128=void
这个方法会让预处理器忽略头文件中针对__float128的检查代码,从而消除错误提示。
内容的提问来源于stack exchange,提问作者Happy Jerry
相关产品推荐
相关产品推荐

