Tencent/puerts

UE4.27 HTML5支持

Closed this issue · 10 comments

想在4.27引擎使用Puerts插件,可以打包成HTML5,在网页上运行
4.27打包HTML5已经OK,但是Puerts插件打包失败
如果要实现这样的事情,我该怎么做,可以给我一些步骤,或者需要了解的知识点吗?谢谢

引擎:
https://github.com/SpeculativeCoder/UnrealEngine-HTML5-ES3 这个分支4.27-html5-es3

支持啊,我试过i没问题

首先得quickjs版本才支持。
其次我记得会有个tail-call的编译错误,需要加编译参数,或者你把这个模块去掉(这个用不上): https://github.com/Tencent/puerts/tree/master/unreal/Puerts/Source/WasmCore

下载这个Unreal_v1.0.6p1版本的这个包puerts_quickjs.tgz,直接放到项目内,并且打开插件,编译完成之后(没报错),直接打包时,报如下错误,请问我该怎么处理

Running AutomationTool...
Parsing command line: -ScriptsForProject=E:/UE/4.27/Html5Engine/Html5Project/Html5Project.uproject BuildCookRun -nocompileeditor -nop4 -project=E:/UE/4.27/Html5Engine/Html5Project/Html5Project.uproject -cook -stage -archive -archivedirectory=E:/UE/4.27/Html5Engine/Html5Project/Packages/V10 -package -ue4exe=E:\UE\ue-4.27-html5-es3\Engine\Binaries\Win64\UE4Editor-Cmd.exe -compressed -ddc=DerivedDataBackendGraph -prereqs -nodebuginfo -targetplatform=HTML5 -build -target=Html5Project -clientconfig=Development -utf8output -compile -compile
Dependencies are up to date (0.173s). Skipping compile.
Setting up ProjectParams for E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject
********** BUILD COMMAND STARTED **********
Running: E:\UE\ue-4.27-html5-es3\Engine\Binaries\DotNET\UnrealBuildTool.exe UnrealPak Win64 Development -Project=E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject  E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject -NoUBTMakefiles  -Manifest=E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-UnrealPak-Win64-Development.txt"
  Writing manifest to E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml
  Target is up to date
  Total execution time: 0.66 seconds
Took 0.7191139s to run UnrealBuildTool.exe, ExitCode=0
Running: E:\UE\ue-4.27-html5-es3\Engine\Binaries\DotNET\UnrealBuildTool.exe Html5Project HTML5 Development -Project=E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject  E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject -NoUBTMakefiles  -remoteini="E:\UE\4.27\Html5Engine\Html5Project" -skipdeploy -Manifest=E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-Html5Project-HTML5-Development.txt"
  h5conf HTML5ToolChain (static constructor): EnableMultithreading = True
  h5conf HTML5ToolChain: EnableMultithreading = True
  h5conf HTML5ToolChain: OffscreenCanvas = False
  h5conf HTML5ToolChain: LLVMWasmBackend = True
  h5conf HTML5ToolChain: EnableTracing = False
  h5conf HTML5ToolChain: ProfilerMode =
  h5conf HTML5ToolChain: SessionStorageCommandLineKey =
  h5conf HTML5ToolChain: EnableSIMD = False
  h5conf HTML5ToolChain: 3rd party lib path = lib-3.1.45-up-mt
  h5conf Setting Emscripten SDK: located in E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\upstream\emscripten
  h5conf Emscripten Config File: E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\.emscripten
  h5conf HTML5ToolChain: Development -O1 fast compile time
  XXX: -o E:\UE\4.27\Html5Engine\Html5Project\Binaries\HTML5\Html5Project.js
  Writing manifest to E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml
  Building Html5Project...
  Building 2 actions with 32 processes...
    [1/2] Html5Project.js
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Isolate::GetCurrent()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Isolate::SetCurrent(v8::Isolate*)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::InstanceTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::ObjectTemplate::SetInternalFieldCount(int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
    emcc: error: 'E:/UE/ue-4.27-html5-es3/Engine/Platforms/HTML5/Build/emsdk/emsdk-3.1.45/upstream/bin\wasm-ld.exe @E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\tmp\emscripten__o3pucmz.rsp.utf-8' failed (returned 1)
Took 4.3881091s to run UnrealBuildTool.exe, ExitCode=6
UnrealBuildTool failed. See log for more details. (E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-Html5Project-HTML5-Development.txt)
AutomationTool exiting with ExitCode=6 (6)
BUILD FAILED

我看JsEnv.Build.cs这里也没有针对HTML5平台第三方库的支持,不知道是不是这个原因
image

另外如果使用WITH_QUICKJS模式,创建JsEnv的地方需要传递这2个参数吗,InExternalRuntime,InExternalContext
如果需要传递的话,该怎么设置值呢
image

	JsEnv = MakeShared<PUERTS_NAMESPACE::FJsEnv>(
		std::make_shared<PUERTS_NAMESPACE::DefaultJSModuleLoader>(TEXT("JavaScript")),
		std::make_shared<PUERTS_NAMESPACE::FDefaultLogger>(),
		DebugPort);

是去年和微信一起搞的,好像JsEnv.build.cs还要有点什么设置,其它用法什么都一样,我有空找下记录。

下载这个Unreal_v1.0.6p1版本的这个包puerts_quickjs.tgz,直接放到项目内,并且打开插件,编译完成之后(没报错),直接打包时,报如下错误,请问我该怎么处理

Running AutomationTool...
Parsing command line: -ScriptsForProject=E:/UE/4.27/Html5Engine/Html5Project/Html5Project.uproject BuildCookRun -nocompileeditor -nop4 -project=E:/UE/4.27/Html5Engine/Html5Project/Html5Project.uproject -cook -stage -archive -archivedirectory=E:/UE/4.27/Html5Engine/Html5Project/Packages/V10 -package -ue4exe=E:\UE\ue-4.27-html5-es3\Engine\Binaries\Win64\UE4Editor-Cmd.exe -compressed -ddc=DerivedDataBackendGraph -prereqs -nodebuginfo -targetplatform=HTML5 -build -target=Html5Project -clientconfig=Development -utf8output -compile -compile
Dependencies are up to date (0.173s). Skipping compile.
Setting up ProjectParams for E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject
********** BUILD COMMAND STARTED **********
Running: E:\UE\ue-4.27-html5-es3\Engine\Binaries\DotNET\UnrealBuildTool.exe UnrealPak Win64 Development -Project=E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject  E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject -NoUBTMakefiles  -Manifest=E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-UnrealPak-Win64-Development.txt"
  Writing manifest to E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml
  Target is up to date
  Total execution time: 0.66 seconds
Took 0.7191139s to run UnrealBuildTool.exe, ExitCode=0
Running: E:\UE\ue-4.27-html5-es3\Engine\Binaries\DotNET\UnrealBuildTool.exe Html5Project HTML5 Development -Project=E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject  E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject -NoUBTMakefiles  -remoteini="E:\UE\4.27\Html5Engine\Html5Project" -skipdeploy -Manifest=E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-Html5Project-HTML5-Development.txt"
  h5conf HTML5ToolChain (static constructor): EnableMultithreading = True
  h5conf HTML5ToolChain: EnableMultithreading = True
  h5conf HTML5ToolChain: OffscreenCanvas = False
  h5conf HTML5ToolChain: LLVMWasmBackend = True
  h5conf HTML5ToolChain: EnableTracing = False
  h5conf HTML5ToolChain: ProfilerMode =
  h5conf HTML5ToolChain: SessionStorageCommandLineKey =
  h5conf HTML5ToolChain: EnableSIMD = False
  h5conf HTML5ToolChain: 3rd party lib path = lib-3.1.45-up-mt
  h5conf Setting Emscripten SDK: located in E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\upstream\emscripten
  h5conf Emscripten Config File: E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\.emscripten
  h5conf HTML5ToolChain: Development -O1 fast compile time
  XXX: -o E:\UE\4.27\Html5Engine\Html5Project\Binaries\HTML5\Html5Project.js
  Writing manifest to E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml
  Building Html5Project...
  Building 2 actions with 32 processes...
    [1/2] Html5Project.js
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Isolate::GetCurrent()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Isolate::SetCurrent(v8::Isolate*)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::InstanceTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::ObjectTemplate::SetInternalFieldCount(int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
    emcc: error: 'E:/UE/ue-4.27-html5-es3/Engine/Platforms/HTML5/Build/emsdk/emsdk-3.1.45/upstream/bin\wasm-ld.exe @E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\tmp\emscripten__o3pucmz.rsp.utf-8' failed (returned 1)
Took 4.3881091s to run UnrealBuildTool.exe, ExitCode=6
UnrealBuildTool failed. See log for more details. (E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-Html5Project-HTML5-Development.txt)
AutomationTool exiting with ExitCode=6 (6)
BUILD FAILED

我看JsEnv.Build.cs这里也没有针对HTML5平台第三方库的支持,不知道是不是这个原因 image

你的这些报错是没编译backend_quickjs的wasm版本。

下载这个Unreal_v1.0.6p1版本的这个包puerts_quickjs.tgz,直接放到项目内,并且打开插件,编译完成之后(没报错),直接打包时,报如下错误,请问我该怎么处理

Running AutomationTool...
Parsing command line: -ScriptsForProject=E:/UE/4.27/Html5Engine/Html5Project/Html5Project.uproject BuildCookRun -nocompileeditor -nop4 -project=E:/UE/4.27/Html5Engine/Html5Project/Html5Project.uproject -cook -stage -archive -archivedirectory=E:/UE/4.27/Html5Engine/Html5Project/Packages/V10 -package -ue4exe=E:\UE\ue-4.27-html5-es3\Engine\Binaries\Win64\UE4Editor-Cmd.exe -compressed -ddc=DerivedDataBackendGraph -prereqs -nodebuginfo -targetplatform=HTML5 -build -target=Html5Project -clientconfig=Development -utf8output -compile -compile
Dependencies are up to date (0.173s). Skipping compile.
Setting up ProjectParams for E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject
********** BUILD COMMAND STARTED **********
Running: E:\UE\ue-4.27-html5-es3\Engine\Binaries\DotNET\UnrealBuildTool.exe UnrealPak Win64 Development -Project=E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject  E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject -NoUBTMakefiles  -Manifest=E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-UnrealPak-Win64-Development.txt"
  Writing manifest to E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml
  Target is up to date
  Total execution time: 0.66 seconds
Took 0.7191139s to run UnrealBuildTool.exe, ExitCode=0
Running: E:\UE\ue-4.27-html5-es3\Engine\Binaries\DotNET\UnrealBuildTool.exe Html5Project HTML5 Development -Project=E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject  E:\UE\4.27\Html5Engine\Html5Project\Html5Project.uproject -NoUBTMakefiles  -remoteini="E:\UE\4.27\Html5Engine\Html5Project" -skipdeploy -Manifest=E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml -NoHotReload -log="E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-Html5Project-HTML5-Development.txt"
  h5conf HTML5ToolChain (static constructor): EnableMultithreading = True
  h5conf HTML5ToolChain: EnableMultithreading = True
  h5conf HTML5ToolChain: OffscreenCanvas = False
  h5conf HTML5ToolChain: LLVMWasmBackend = True
  h5conf HTML5ToolChain: EnableTracing = False
  h5conf HTML5ToolChain: ProfilerMode =
  h5conf HTML5ToolChain: SessionStorageCommandLineKey =
  h5conf HTML5ToolChain: EnableSIMD = False
  h5conf HTML5ToolChain: 3rd party lib path = lib-3.1.45-up-mt
  h5conf Setting Emscripten SDK: located in E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\upstream\emscripten
  h5conf Emscripten Config File: E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\.emscripten
  h5conf HTML5ToolChain: Development -O1 fast compile time
  XXX: -o E:\UE\4.27\Html5Engine\Html5Project\Binaries\HTML5\Html5Project.js
  Writing manifest to E:\UE\ue-4.27-html5-es3\Engine\Intermediate\Build\Manifest.xml
  Building Html5Project...
  Building 2 actions with 32 processes...
    [1/2] Html5Project.js
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Isolate::GetCurrent()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Isolate::SetCurrent(v8::Isolate*)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::InstanceTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::ObjectTemplate::SetInternalFieldCount(int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::PrototypeTemplate()
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)
    wasm-ld: error: E:\\UE\\4.27\\Html5Engine\\Html5Project\\Intermediate\\Build\\HTML5\\Html5Project\\Development\\JsEnv\\Module.JsEnv.1_of_3.cpp.o: undefined symbol: v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)
    wasm-ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
    emcc: error: 'E:/UE/ue-4.27-html5-es3/Engine/Platforms/HTML5/Build/emsdk/emsdk-3.1.45/upstream/bin\wasm-ld.exe @E:\UE\ue-4.27-html5-es3\Engine\Platforms\HTML5\Build\emsdk\emsdk-3.1.45\tmp\emscripten__o3pucmz.rsp.utf-8' failed (returned 1)
Took 4.3881091s to run UnrealBuildTool.exe, ExitCode=6
UnrealBuildTool failed. See log for more details. (E:\UE\ue-4.27-html5-es3\Engine\Programs\AutomationTool\Saved\Logs\UBT-Html5Project-HTML5-Development.txt)
AutomationTool exiting with ExitCode=6 (6)
BUILD FAILED

我看JsEnv.Build.cs这里也没有针对HTML5平台第三方库的支持,不知道是不是这个原因 image

你的这些报错是没编译backend_quickjs的wasm版本。

该怎么编译呢,github上找了这个库,但是没有详细的文档描述怎么编译

是去年和微信一起搞的,好像JsEnv.build.cs还要有点什么设置,其它用法什么都一样,我有空找下记录。

谢谢,我已经弄好了,可以在网页上运行了

可以分享下过程,应该还有其他有需要的童靴

https://github.com/SpeculativeCoder/UnrealEngine/tree/4.27-html5-es3 这个分支4.27-html5-es3

Puerts

Unreal_v1.0.6p1版本的这个包puerts_quickjs.tgz

注意事项:

  • 需要编译backend_quickjswasm版本,参考下方编译方法,完成后拷贝到Plugins/Puerts/ThirdParty/quickjs/Lib/HTML5/libquickjs.a
  • 修改JsEnv.build.cs文件UseQuickjs = true,移除WasmCore依赖,在ThirdPartyQJS函数添加平台第三方库支持
        else if (Target.Platform == UnrealTargetPlatform.HTML5)
        {
            string V8LibraryPath = Path.Combine(LibraryPath, "HTML5");
            PublicAdditionalLibraries.Add(Path.Combine(V8LibraryPath, "libquickjs.a"));
            //PrivateDefinitions.Add("BUILDING_V8_SHARED");
        }
  • Puerts.uplugin移除WasmCore模块,Puerts模块WhitelistPlatforms添加HTML5
  • DefaultGame.ini添加+DirectoriesToAlwaysStageAsNonUFS=(Path="JavaScript")拷贝JS代码

backend_quickjs 编译

  • 安装 emscripten 这个工具用于将代码编译成wasm
  • 下载这个库 backend-quickjs
  • 安装 mingw 编译工具
  • 修改CMakeLists.txt,添加编译参数-matomics -fno-exceptions
set(qjs_cflags -Wall -matomics -fno-exceptions)
  • 创建build目录
  • build目录下运行终端命令
  • emcmake cmake ..
  • emmake make 运行完成后会在build目录下生成libquickjs.a

quickjs HTML5

可以下载我编译好的文件放在Plugins/Puerts/ThirdParty/quickjs/Lib/HTML5/libquickjs.a
libquickjs.zip