我有一个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());
我是初学者。
答案 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.