Ubuntu 17构建UDK2018时Build工具误编译Windows组件失败,如何解决?
解决Ubuntu 17构建UDK2018时误编译Windows代码的问题
我来帮你排查这个困扰——这种误触发Windows代码编译的情况,大多是目标平台配置错误或者构建环境变量未正确对齐导致的,咱们一步步来修复:
1. 明确指定构建参数,避免默认Windows配置
UDK的构建系统如果没收到明确的平台/工具链指令,可能会 fallback 到Windows相关的默认配置。执行构建时一定要补全关键参数:
build all -t GCC5 -a X64 -p [你的平台DSC文件路径]
-t GCC5:指定使用GCC工具链(Ubuntu17推荐用GCC5,如果你装的是GCC6可以改成GCC6)-a X64:指定目标架构(根据你的平台调整,比如IA32)-p:指定你的平台描述文件(DSC),确保这个文件里没有包含Windows专属的模块或组件
2. 检查并修正构建环境变量
虽然你已经运行了edksetup.sh BaseTools,但还是要确认核心变量是否正确:
- 运行
echo ${TOOL_CHAIN_TAG},输出应该是GCC5(或你用的GCC版本),绝对不能是MSVC这类Windows工具链标识 - 运行
echo ${EDK_TOOLS_PATH},确认指向你刚编译好的Linux版BaseTools目录,而非Windows版本的工具路径
如果变量不对,重新初始化环境时强制指定工具链:
. edksetup.sh BaseTools TOOL_CHAIN_TAG=GCC5
3. 彻底清理旧构建缓存
之前的构建残留(比如Windows平台的中间文件)可能会干扰新构建,执行以下操作清空缓存:
build clean rm -rf Build/
之后再重新执行完整的构建命令。
4. 确保BaseTools依赖完整且兼容
UDK2018在Ubuntu17上需要特定的依赖包,先确认你已经安装:
sudo apt-get install build-essential uuid-dev iasl git python3-distutils gcc-5 g++-5
如果之前编译BaseTools时有隐藏警告,建议重新编译一次:
make clean -C ${EDK_TOOLS_PATH} make all -C ${EDK_TOOLS_PATH}
5. 检查平台代码中的条件编译逻辑
如果以上步骤都无效,那大概率是平台代码里的条件编译出了问题。找到构建失败时提到的文件名,打开后检查是否有类似#ifdef _WIN32的宏——这类宏在Linux环境下不会被屏蔽,导致Windows代码被编译。
你可以把这类条件编译替换成UDK标准的跨平台宏,比如:
#ifdef MDE_CPU_X64 // 通用X64代码 #elif defined(_WIN32) // Windows专属代码(仅在Windows构建时生效) #endif
或者直接注释掉Linux环境下不需要的Windows专属代码段。
内容的提问来源于stack exchange,提问作者Lesh
相关产品推荐
相关产品推荐

