webassembly.instantiate与模块

时间:2019-01-15 16:19:39

标签: webassembly

我有一个imagePV.c文件:

unsigned char *imageGrayscale(...) {...} . 

然后我做了:$ emcc -o胶.js imagePV.c ....

在index.html中,我放置了:

    <script src="glue.js"></script> . 
    <script> 
        var imageGrayscale= Module.cwrap('imageGrayscale',...);
        Module.HEAPU8.set(...);
        imageGrayscale(...);
    </script>

所有作品。所以我的问题是:需要实例化什么?我的意思是:

有什么需要?
WebAssembly.instantiateStreaming(fetch('glue.wasm'), importObject).then(obj => obj.instance.exports.exported_func());

我是初学者。

1 个答案:

答案 0 :(得分:1)

简短答案:您的Module已经在幕后使用WebAssembly.instantiateStreaming()

长答案:Emscripten(emcc)不仅是编译器,还是整个工具链的基础架构。当您使用emcc命令时,emcc会调用clang编译器将您的C代码编译为WASM,并使用imports链接要在WASM中使用的必要JS代码,并生成a boilerplate JS code (it's called preamble.js)来实例化Module的WASM代码,以便开发人员无需编写您自己的代码即可编写引导代码。

查看您的glue.js代码。您可以找到a line that uses WebAssembly.instantiateStreaming()。除非您使用不带emcc选项的-s SIDE_MODULE=1,否则它将始终为您生成preamble.js代码。因此,通常您不需要自己使用WebAssembly

一些高级用户不想使用这么大的样板,而是以更艰难的方式使用WASM,例如使用不带emcc的clang。 Then they need to use WebAssembly including instantiateStreaming() themselves.