Closed chexiongsheng closed 1 year ago
在UE的编辑器下,插件和Game是不同的dll。而quickjs后端有全局变量,静态链接后(插件和Game)都有一份。 这导致在Game模块下直接调用(仿)v8的api有可能崩溃。 上述问题可通过提供dll版本解决。
dll版本主要有几个调整 1、编译的调整; 2、类静态变量的访问放到v8-impl.cc,否则链接说找不到符号; 3、针对ue特有的,重载new和delete的调整:把context的new移动到v8-impl.cc,否则new时用的是ue的内存分配器,delete(Global<T>::Reset()调用的delete)用的是c++原生delete,会崩溃。
Global<T>::Reset()
在UE的编辑器下,插件和Game是不同的dll。而quickjs后端有全局变量,静态链接后(插件和Game)都有一份。 这导致在Game模块下直接调用(仿)v8的api有可能崩溃。 上述问题可通过提供dll版本解决。
dll版本主要有几个调整 1、编译的调整; 2、类静态变量的访问放到v8-impl.cc,否则链接说找不到符号; 3、针对ue特有的,重载new和delete的调整:把context的new移动到v8-impl.cc,否则new时用的是ue的内存分配器,delete(
Global<T>::Reset()
调用的delete)用的是c++原生delete,会崩溃。