emscripten_run_script() 在优化构建中删除

emscripten_run_script() removed in optimised build

在我的 .cpp 文件中有一行:

emscripten_run_script("callOut();console.error('Hello');");

此函数 callOut 只是向控制台写入一条消息,以便我知道它已被调用。

这在使用 -g4 构建时一切正常,但在使用推荐版本 -O2 编译时没有任何作用。我什至在 javascript 输出中找不到文本 "hello"。

它应该像这样工作吗?有什么办法可以在发布版本中获得此调用?

emscripten_run_script 的替代方法是使用 EM_ASM 宏。我从来没有遇到过这些在优化构建中消失的问题。

所以你的例子相当于

EM_ASM({
  callOut();
  console.error("Hello");
});

问题是我在调用它之前没有等待 emscripten 代码完全初始化。你应该等到 emscripten main() 函数被调用,然后你就知道它已经准备好了。

使用 -O2 时问题变得更糟,因为 emcc 创建了一个单独的内存初始化文件,必须在 emscripten 代码准备就绪之前加载该文件。