出现问题:
在编译UE5.2引擎源码时,遇到多行C4756警告,提示常量算法中溢出问题。报错信息如下:
出现原因:
检查报错代码时,发现每段代码都包含“INFINITY”的宏定义,这很可能就是导致错误的原因。
对比新版本SDK的“INFINITY”宏的宏定义:
原定义:
#define INFINITY ((float)(_HUGE_ENUF * _HUGE_ENUF))
新定义:#define INFINITY ((float)(_HUGE_ENF))
“_HUGE_ENUF”宏并没有改变,这一调整导致了常量算法溢出的问题。
因此Windows SDK 和 MSVC 的版本对源码编译有所影响。
这里去官方文档查看相应的编译说明,查看UE5.2推荐的 Windows SDK 和 MSVC 的版本。
解决办法:
1.回退 SDK 和 MSVC版本
这里查看自己的SDK编译版本:
建议使用与官方推荐版本接近的SDK版本,当前版本与推荐版本存在较大差异。
回退版本:
MSVC版本:
2.更改配置文件让 Visual Studio 使用指定版本编译
当电脑上安装多个 SDK 和 MSVC 版本且需保留其他版本时,虽然 Visual Studio 默认会使用特定版本进行编译,但可以通过配置手动选择所需版本,无需删除其他安装的版本。
修改目录下的:
<USER>/AppData/Roaming/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<WindowsPlatform>
<WindowsSdkVersion>10.0.19041.0</WindowsSdkVersion>
</WindowsPlatform>
</Configuration>
官方文档中描述还可以修改如下目录:
修改完成后便可以通过编译: