Tencent/puerts

[UE] Bug: 基于模板的静态绑定,编译报错 C4668

Closed this issue · 3 comments

前置阅读 | Pre-reading

Puer的版本 | Puer Version

Unreal_v1.0.6p1

UE的版本 | UE Version

5.3.2

发生在哪个平台 | Platform

Editor(win)

错误信息 | Error Message

10>v8config.h(354): Error C4668 : 没有将“V8_HAS_ATTRIBUTE_ALWAYS_INLINE”定义为预处理器宏,用“0”替换“#if/#elif” 10>v8config.h(362): Error C4668 : 没有将“V8_HAS_BUILTIN_ASSUME_ALIGNED”定义为预处理器宏,用“0”替换“#if/#elif” 10>v8config.h(373): Error C4668 : 没有将“V8_HAS_ATTRIBUTE_NONNULL”定义为预处理器宏,用“0”替换“#if/#elif” 10>v8config.h(383): Error C4668 : 没有将“V8_HAS_ATTRIBUTE_NOINLINE”定义为预处理器宏,用“0”替换“#if/#elif” 10>v8config.h(418): Error C4668 : 没有将“V8_HAS_BUILTIN_EXPECT”定义为预处理器宏,用“0”替换“#if/#elif” 10>v8config.h(430): Error C4668 : 没有将“V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT”定义为预处理器宏,用“0”替换“#if/#elif” 10>v8config.h(451): Error C4668 : 没有将“USING_V8_SHARED”定义为预处理器宏,用“0”替换“#if/#elif”

问题重现 | Bug reproduce

1.引擎版本UE5.3
2.vs版本 Visual Studio 2022 14.39.33523,Windows 10.0.22621.0 SDK
3.使用时的源代码
`UsingCppType(UIDCreator);

struct AutoRegister_UIDCreator
{
AutoRegister_UIDCreator()
{
puerts::DefineClass()
.Function("CreateUID", MakeFunction(&UIDCreator::CreateUID))
.Register();
}
};

AutoRegister_UIDCreator AutoRegister_UIDCreator_;`
4.使用模块.build.cs中引入模块“JsEnv”,同时按照文档加了bEnableUndefinedIdentifierWarnings = false; // 避免在VS 2017编译时出现C4668错误

我不确定是我这边开发环境问题,比如使用的MSVC版本不对还是怎么样?按照文档操作完了还是编译失败,于是为了解决这个问题,我在include “Binding.hpp”之前加上了 #pragma warning(disable: 4668)。这个可以编译过去,但是在打包安卓包的时候报错 v8.h(4917,5): error: 'V8_CC_MSVC' is not defined, evaluates to 0 [-Werror,-Wundef]。
由于这边引入了Binding.hpp-->#include "ScriptBackend.hpp"-->#include "V8Backend.hpp"->#include "DataTransfer.h"-->#include "v8.h"。
我不确定两者是否有相关性,还麻烦大佬解答一下。

5.3试试按这个改下:chexiongsheng/puerts_unreal_demo@2b21d14

可以了 这下没问题了