我正在尝试在 Node.js 中运行 WebAssembly 模块,但收到 Wasm 解码失败结果
。我认为我的问题是将 Node Buffer 转换为 ArrayBuffer 。这是我适用的代码:
fs.readFileAsync( WASM_PATH )
.then( buf => buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) )
.then( arrayBuffer => Wasm.instantiateModule(arrayBuffer) )
.then( results => console.log(results.instance) )
.catch( err => console.error(err) );
我收到此错误:
(relevant details)
Wasm decoding failedResult = expected version 0c 00 00 00, found 01 00 00 00 @+4
当我使用 emcc hello_world.c -s WASM=1 -o hello.html
时,我可以加载该模块并在浏览器中运行它。所以,我很确定这是我的问题或者可能是一些兼容性问题。提前致谢。
最佳答案
您的 Node 版本使用 V8 的较旧的 MVP 版本,预计版本为 0xC
。您的工具链发出 now-stable MVP version 0x1
.
Node roughly follows Chrome releases ,和Chrome 57添加了对 MVP WebAssembly 的支持。该页面显示 Chrome 57 的 V8 版本是 5.7.492.65。
因此 Node 中对 MVP 的支持迫在眉睫。
或者,您可以使用较旧的 Emscripten 工具链。不过它会很旧:0xd
是 MVP 之前的版本(并且 0xd
实际上与 MVP 相同,对版本进行取模)。
关于node.js - 将 hello world 编译为 wasm 并在 Node 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42852594/