3.8.6发布Windows版本使用VisualStudio编译报错

用 3.8.6 版本 使用 Hello World 发布 Windows 版本,使用 Visual Studio 2022 版本编译预览,报错

0x00007FFA318A3240 (msvcp140d.dll)处(位于 NewProject_6.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突。

复现方式如上,复现100%

有两种方法:

  1. 使用vs2019生成工程(然后可以用vs2022打开,但不要升级)
  2. 删除bin目录下c-runtime相关的dll(msvcp140.dll msvcp140d.dll msvcrt.dll),并且安装最新版本的vc runtime redistributable。

我先下载 Visual Studio 2019 试试看,直接用 Visual Studio 2019 打开并编译也是可以的吧

直接用2019打开是可以的

native/engine/win64/CMakeLists.txt 加上

if(WIN32)
    target_compile_definitions(${ENGINE_NAME} PUBLIC _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)
endif()
1赞

不过使用 visual studio 2019 打开项目后,查看有这种报错

15:15:32 [ERROR]: JS: rejectAfterPromiseResolved
15:15:32 [ERROR]: [ERROR] file C:\demo\cocos-engine-bak\native\cocos\application\CocosApplication.cpp: line 173
15:15:32 [ERROR]:
Uncaught Exception:

  • location :
  • msg : rejectAfterPromiseResolved
  • detail :

导致 显示白屏,这种需要怎么处理

:joy: Hello World 工程可以,业务项目不行。
版本用 CocosCreator 3.7.3 了

可能是js抛异常了。

构建时勾选 这个选项后报错解决,但是不知道这个的具体功能是什么,有没有大神求指导下?

image

使用 Visual Studio 2019 版本可以,2022版本一直尝试不行,放弃。

我记得这个报错好像是一次vs2022更新导致的,我那时候用的应该是cocos3.8.3的版本,一开始一直用的都没问题,然后有一天我更新了下vs2022,其他啥都没动,编译后运行就报这个错误,之后也是查解决方法,说是改用vs2019编译就行了,就这样我到现在都一直用的是vs2019

在预处理器里定义_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR也可以解决