Linux下编译EDK2时遇Objcopy错误:输入*.dll文件为空
EDK2编译MnpDxe.dll等文件错误的解决方案
以下是针对Kali 2023.3环境下EDK2编译报错的可行解决步骤:
1. 适配高版本GCC的工具链标签
GCC 13.1属于较新版本,EDK2默认的GCC5工具链定义对其兼容性较差,建议切换到对应版本的工具链标签:
- 先安装兼容的GCC版本(以GCC11为例):
sudo apt install gcc-11 g++-11 - 设置环境变量指定工具链路径与标签:
export GCC11_BIN=/usr/bin/ export TOOL_CHAIN_TAG=GCC11 - 重新执行编译命令
2. 切换到EDK2稳定分支
最新源码可能存在未修复的兼容性问题,切换到经过验证的稳定分支:
git checkout edk2-stable202308 git submodule update --init --recursive
- 重新编译BaseTools:
make -C BaseTools clean && make -C BaseTools
3. 添加GCC高版本兼容编译参数
针对MnpDxe这类报错模块,手动添加兼容性编译选项:
- 编辑
MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf,在[BuildOptions]段添加:[BuildOptions] GCC:*_*_X64_CC_FLAGS = -Wno-error=stringop-overflow -Wno-error=array-bounds - 或者全局修改工具链配置:编辑
BaseTools/Conf/tools_def.template,找到GCC系列的CC_FLAGS配置,添加上述参数后,执行build -t GCC5 -p MdeModulePkg/MdeModulePkg.dsc --gentoolsdef更新配置文件
4. 验证Python依赖与环境变量
- 安装EDK2所需Python依赖:
pip install -r edk2/BaseTools/Source/Python/requirements.txt - 确保核心环境变量正确设置:
export EDK2_PATH=$(pwd) export WORKSPACE=$(pwd)
5. 清理编译缓存后重新构建
彻底清除之前的编译残留,避免缓存干扰:
rm -rf Build/ make -C BaseTools clean source edksetup.sh make -C BaseTools build -t GCC11 -a X64 -p MdeModulePkg/MdeModulePkg.dsc
内容的提问来源于stack exchange,提问作者Parsa Mousavi
相关产品推荐
相关产品推荐

