AOSP编译报错:'cstdio'文件未找到,多环境复现异常
AOSP编译报错:edk2 BaseTools编译时找不到
cstdio文件 问题场景
构建某私有厂商定制的AOSP克隆版本时,仅一台个人设备能正常完成编译,两台同系统版本的企业设备均在编译edk2 BaseTools阶段失败,报错'cstdio' file not found。
错误日志
/home/username/workspace/aosp/prebuilts/clang/host/linux-x86/clang-r383902b1/bin/clang++ -c -DPCCTS_USE_NAMESPACE_STD -I Pccts/h -I .. -I ../Include/Common -I ../Include/ -I ../Include/IndustryStandard -I ../Common/ -I .. -I . -I ../Include/X64/ Pccts/h/AParser.cpp -o AParser.o In file included from Pccts/h/AParser.cpp:30: In file included from Pccts/h/pcctscfg.h:61: Pccts/h/pccts_stdio.h:5:10: fatal error: 'cstdio' file not found #include <cstdio> ^~~~~~~~ 1 error generated. make[3]: *** [GNUmakefile:68: AParser.o] Error 1 make[3]: Leaving directory '/home/username/workspace/aosp/bootable/bootloader/edk2/BaseTools/Source/C/VfrCompile' make[2]: *** [GNUmakefile:79: VfrCompile] Error 2 make[2]: Leaving directory '/home/username/workspace/aosp/bootable/bootloader/edk2/BaseTools/Source/C' make[1]: *** [GNUmakefile:25: Source/C] Error 2 make[1]: Leaving directory '/home/username/workspace/aosp/bootable/bootloader/edk2/BaseTools' make: *** [makefile:133: EDK_TOOLS_BIN] Error 2 make: Leaving directory '/home/username/workspace/aosp/bootable/bootloader/edk2'
设备信息
- 个人游戏主机:i9-13900KF,Ubuntu 22.04.3 LTS(可正常编译)
- 企业台式机:Xeon W-2295,Ubuntu 22.04.3 LTS(编译失败)
- 企业笔记本:i9-11950H,Ubuntu 22.04.3 LTS(编译失败)
已尝试清理重编、同步软件包、复制仓库及构建产物、安装gcc/g++/clang等工具,问题仍未解决。
解决方案建议
检查预编译clang的sysroot完整性
AOSP自带的clang可能依赖系统标准库,执行以下命令检查clang的sysroot路径是否存在且完整:/home/username/workspace/aosp/prebuilts/clang/host/linux-x86/clang-r383902b1/bin/clang++ --print-sysroot如果输出路径不存在或为空,手动指定系统sysroot编译:
export CLANG_SYSTEM_INCLUDE=/usr/include/c++/11或在编译时添加参数:
--sysroot=/usr安装完整的C++标准库开发包
确保企业设备安装了libstdc++的开发文件:sudo apt install libstdc++-11-dev libc6-dev检查环境变量冲突
企业设备可能存在自定义环境变量干扰编译,执行env查看是否有CC/CXX/CFLAGS/CXXFLAGS等变量覆盖了AOSP默认设置,临时清空这些变量后重新编译:unset CC CXX CFLAGS CXXFLAGS make clean && make替换clang版本
尝试使用系统自带的clang替代AOSP预编译版本,修改edk2 BaseTools的Makefile,将CLANG变量指向系统clang路径:export CLANG=/usr/bin/clang++或直接修改
/home/username/workspace/aosp/bootable/bootloader/edk2/BaseTools/GNUmakefile中的clang路径配置。同步edk2子模块
检查edk2子模块是否完整同步,执行:cd /home/username/workspace/aosp/bootable/bootloader/edk2 git submodule sync && git submodule update --init --recursive
内容的提问来源于stack exchange,提问作者copolii
相关产品推荐
相关产品推荐

