puerts
puerts copied to clipboard
[UE] Bug: error: no template named 'result_of'
前置阅读 | Pre-reading
Puer的版本 | Puer Version
Unreal_v1.0.6p1
UE的版本 | UE Version
5.3.2
发生在哪个平台 | Platform
Editor(mac)
错误信息 | Error Message
CompilerResultsLog: ^ CompilerResultsLog: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdio.h:180:1: note: 'sprintf' has been explicitly marked deprecated here CompilerResultsLog: __deprecated_msg("This function is provided for compatibility reasons only. Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead.") CompilerResultsLog: ^ CompilerResultsLog: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/cdefs.h:215:48: note: expanded from macro '__deprecated_msg' CompilerResultsLog: #define __deprecated_msg(_msg) attribute((deprecated(_msg))) CompilerResultsLog: ^ CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/Intermediate/Build/Mac/x64/UnrealEditor/Development/JsEnv/Module.JsEnv.3.cpp:22: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/Source/JsEnv/Private/V8InspectorImpl.cpp:39: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/config/asio_no_tls.hpp:32: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/endpoint.hpp:32: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/connection.hpp:31: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/base.hpp:31: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/common/asio.hpp:52: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio.hpp:38: CompilerResultsLog: /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio/bind_cancellation_slot.hpp:158:31: error: no template named 'result_of' CompilerResultsLog: typename void_type<typename result_of<T()>::type>::type> CompilerResultsLog: ^ CompilerResultsLog: /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio/bind_cancellation_slot.hpp:373:12: error: no template named 'result_of' CompilerResultsLog: typename result_of<T(Args...)>::type operator()( CompilerResultsLog: ^ CompilerResultsLog: /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio/bind_cancellation_slot.hpp:381:12: error: no template named 'result_of' CompilerResultsLog: typename result_of<T(Args...)>::type operator()( CompilerResultsLog: ^ CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/Intermediate/Build/Mac/x64/UnrealEditor/Development/JsEnv/Module.JsEnv.3.cpp:22: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/Source/JsEnv/Private/V8InspectorImpl.cpp:39: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/config/asio_no_tls.hpp:32: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/endpoint.hpp:32: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/connection.hpp:31: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/base.hpp:31: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/common/asio.hpp:52: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio.hpp:39: CompilerResultsLog: /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio/bind_executor.hpp:198:31: error: no template named 'result_of' CompilerResultsLog: typename void_type<typename result_of<T()>::type>::type> CompilerResultsLog: ^ CompilerResultsLog: /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio/bind_executor.hpp:403:12: error: no template named 'result_of' CompilerResultsLog: typename result_of<T(Args...)>::type operator()( CompilerResultsLog: ^ CompilerResultsLog: /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio/bind_executor.hpp:411:12: error: no template named 'result_of' CompilerResultsLog: typename result_of<T(Args...)>::type operator()( CompilerResultsLog: ^ CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/Intermediate/Build/Mac/x64/UnrealEditor/Development/JsEnv/Module.JsEnv.3.cpp:22: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/Source/JsEnv/Private/V8InspectorImpl.cpp:39: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/config/asio_no_tls.hpp:32: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/endpoint.hpp:32: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/connection.hpp:31: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/transport/asio/base.hpp:31: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/websocketpp/websocketpp/common/asio.hpp:52: CompilerResultsLog: In file included from /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio.hpp:51: CompilerResultsLog: /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio/co_spawn.hpp:391:16: error: no template named 'result_of' CompilerResultsLog: typename result_of<F()>::type>::type) CompletionToken CompilerResultsLog: ^ CompilerResultsLog: /Users/ankye/ue5/puertstest/Plugins/Puerts/ThirdParty/Include/asio/asio/co_spawn.hpp:478:16: error: no template named 'result_of' CompilerResultsLog: typename result_of<F()>::type>::type) CompletionToken CompilerResultsLog: ^ CompilerResultsLog: fatal error: too many errors emitted, stopping now [-ferror-limit=] CompilerResultsLog: 1 warning and 20 errors generated.
问题重现 | Bug reproduce
$ clang --version
Apple clang version 15.0.0 (clang-1500.1.0.2.5)
Target: x86_64-apple-darwin22.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ clang++ --version
Apple clang version 15.0.0 (clang-1500.1.0.2.5)
Target: x86_64-apple-darwin22.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ xcodebuild -version
Xcode 15.2
Build version 15C500b
导入插件生成xcode mac工程,构建编译失败
这是asio的c++20兼容性问题。 可以在JsEnv.Build.cs指明使用c++17编译。
public JsEnv(ReadOnlyTargetRules Target) : base(Target)
{
#if UE_5_3_OR_LATER
PCHUsage = PCHUsageMode.NoPCHs;
CppStandard = CppStandardVersion.Cpp17;
#endif
如果还不行,可以先禁用掉调试(只有调试需要用到asio)
public JsEnv(ReadOnlyTargetRules Target) : base(Target)
{
#if UE_5_3_OR_LATER
PCHUsage = PCHUsageMode.NoPCHs;
PublicDefinitions.Add("WITHOUT_INSPECTOR");;
#endif
后面我升级下asio
https://github.com/Tencent/puerts/commit/35b81c83e9c339a0699410c53cc1221b20845dbc