我正在使用Emscripten将一些C代码编译为WebAssembly。这是我的Makefile中的最后一个emcc调用:

emcc $(CFLAGS) iva.a -o iva.js


它将按预期工作并生成一个.js文件和一个.wasm文件。 JS如下加载到我的HTML页面中:

<script src="../dist/iva.js">


并正确加载并实例化WebAssembly代码iva.wasm。加载页面后不久,该消息就会出现在控制台中:

Fetch finished loading: GET "http://localhost:6931/dist/iva.wasm".


我的意思是说,我的WebAssembly是通过fetch()加载的,并且可能需要进行一些处理之后,才可以通过控制台访问我的函数:

Module._init_display_system()


并获取返回值。这是事实,一切正常。

显然,我也应该能够通过脚本执行此操作。但是,我看不到仅在实例化WebAssembly之后才运行函数的方法。我感到自己缺少明显的东西。

无论如何,我该怎么做?

最佳答案

使用Module['onRuntimeInitialized']

Module['onRuntimeInitialized'] = function() {
       console.log("wasm loaded ");
       var x=Module.ccall("doubleIt","number",["number"],[20]);
       alert(x);
    }


您已经使用过emsdk,有像Wasmfiddle这样的在线WASM编译器。查找my github repo对这两种方法都有用。

关于javascript - 如何检测Emscripten生成的.js何时完成wasm的加载,以便我可以运行调用它的JS函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58255857/

10-11 16:44