emscripten_run_script() 在优化构建中移除



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

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

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

使用-g4构建时,这一切都可以正常工作,但是当使用推荐的发布-O2进行编译时,没有任何作用。我什至在javascript输出中找不到文本"hello"。

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

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

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

emscripten_run_script的替代方法是使用 EM_ASM 宏。我从来没有遇到过这些在优化版本中消失的麻烦。

所以你的例子等效于

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

最新更新