在我的.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");
});