"断言失败:您需要等待运行时准备好"在JavaScript中调用C函数时出错

Kil*_*ner 9 javascript emscripten webassembly

我正在尝试一个简单的例子,用JavaScript调用编译为.wasm的C函数.

这是counter.c文件:

#include <emscripten.h>

int counter = 100;

EMSCRIPTEN_KEEPALIVE
int count() {  
    counter += 1;
    return counter;
}
Run Code Online (Sandbox Code Playgroud)

我用它编译了它emcc counter.c -s WASM=1 -o counter.js.

我的main.jsJavaScript文件:

const count = Module.cwrap('count ', 'number');
console.log(count());
Run Code Online (Sandbox Code Playgroud)

我的index.html文件只加载正文中的两个.js文件,没有别的:

<script type="text/javascript" src="counter.js"></script>
<script type="text/javascript" src="main.js"></script>
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Uncaught abort("Assertion failed: you need to wait for the runtime to be ready (e.g. wait for main() to be called)") at Error

当我试着打电话count()的时候main.js.我怎么能等待运行时准备好?

Kil*_*ner 10

我找到了一个快速解决方案 我需要修改main.js为:

Module['onRuntimeInitialized'] = onRuntimeInitialized;
const count = Module.cwrap('count ', 'number');

function onRuntimeInitialized() {
    console.log(count());
}
Run Code Online (Sandbox Code Playgroud)

这会改变emscripten生成Modulecounter.js脚本中定义的对象.