You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译EDK2时如何禁用-Werror?兼结构体编译错误排查

解决EDK2 EmulatorPkg编译中的-Werror禁用及CHAR16指针错误12288问题

一、禁用-Werror的几种方法

新版EDK2已移除Nt32Pkg,替换为EmulatorPkg,工具链配置逻辑也有更新,你可以通过以下方式关闭-Werror:

  1. 编译命令行参数
    执行build命令时直接添加宏定义:

    build -a X64 -t VS2019 -p EmulatorPkg/EmulatorPkg.dsc -D NO_WERROR=TRUE
    

    该宏会让EDK2构建系统自动移除MSVC的/Werror编译选项。

  2. 修改EmulatorPkg.dsc文件
    在Dsc文件的[Defines]段添加:

    DEFINES += NO_WERROR=TRUE
    

    这样每次编译该Pkg时都会自动禁用警告转错误的规则。

  3. 调整tools_def.txt配置
    找到Conf/tools_def.txt中对应VS2019的工具链条目(如MSVC:*_VS2019_*),定位包含/Werror的编译FLAGS行,直接删除/Werror字段。注意不同架构(X64/IA32)的条目可能需要分别修改。

二、CHAR16指针错误12288的原因及修复

错误12288对应MSVC的C4228警告被升级为错误,触发场景是:

  • 结构体中使用了非CONST的CHAR16*成员,却用字符串字面量(如L"xxx")初始化它。
  • 字符串字面量在C++标准中属于const CHAR16*类型,赋值给非const指针违反类型安全,开启-Werror时会被转为错误。

修复方法:

  • 将结构体中的CHAR16*成员改为CONST CHAR16*,符合EDK2编码规范。
  • 若必须使用非const指针,确保初始化时使用可修改的CHAR16数组,而非字符串字面量。

内容的提问来源于stack exchange,提问作者Kotissimus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:48:17