ChuanXin 发表于 2022-9-1 09:54

UE5结合Lua5.3的几个编译问题

前言

某次任务开发过程中,需要把Lua5.3.6的版本合入到UE5中,按照正常合入流程遇到几个编译问题,大部分问题通过网上给出的解决方案基本可以解决,但还是有些方案解决不是很彻底,所以这里记录一下
编译问题: 找不到宏定义

没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”UE5在没有定义宏的情况下去使用是会报错的,所以这个报错根本原因就是为什么这个宏没有定义。
针对网上方法,主要有两个方案:
定性为宏冲突的情况,UE5里定义的宏和Windows平台自己定义的宏冲突了,但是冲突的情况错误提示更应该是不匹配。如果是冲突的错误提示,可以尝试按以下修改。
#include "Windows/AllowWindowsPlatformTypes.h"
#include "Windows/PreWindowsApi.h"
#include "冲突的文件"

#include "Windows/PostWindowsApi.h"
#include "Windows/HideWindowsPlatformTypes.h"
第二种解决办法更加暴力一些,就是把这个错误改成Warning,在模块里添加bEnableUndefinedIdentifierWarnings=1 就行。 但是这种策略会导致所有的未定义宏都能正确使用,这其实是一个不合适的用法,应该是最后没有办法再使用
回到问题本身,是缺少_WIN32_WINNT_WIN10_TH2宏相关定义,那么有两个方向可以测试,第一确认是否需要include这个头文件,如果不需要可以去掉。第二,把缺少的宏定义补上。结合我们遇到问题,由于报错都是系统文件,所以不方便修改include,那么我们只能添加上宏。
那么这些宏是干什么用的?从VS官网上可以看到,这些个宏是用错了的,并且在新版本里有所修改,正常应该使用以下几个宏:如下定义:
//The right names are defined in sdkddkver.h:
#define NTDDI_WINTHRESHOLD 0x0A000000 /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10 0x0A000000 /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10_TH2 0x0A000001 /* ABRACADABRA_WIN10_TH2 */
#define NTDDI_WIN10_RS1 0x0A000002 /* ABRACADABRA_WIN10_RS1 */
#define NTDDI_WIN10_RS2 0x0A000003 /* ABRACADABRA_WIN10_RS2 */
#define NTDDI_WIN10_RS3 0x0A000004 /* ABRACADABRA_WIN10_RS3 */
#define NTDDI_WIN10_RS4 0x0A000005 /* ABRACADABRA_WIN10_RS4 */
#define NTDDI_WIN10_RS5 0x0A000006 /* ABRACADABRA_WIN10_RS5 */
#define WDK_NTDDI_VERSION NTDDI_WIN10_RS5 /* ABRACADABRA_WIN10_RS5 */所以我们只要在正确位置把宏定义加上就上。
注:本文是基于Lua5.3.6,Win10.0.18362.0进行编译的,如遇到不同情况需要具体分析。
页: [1]
查看完整版本: UE5结合Lua5.3的几个编译问题