将hello world编译为wasm并在节点中运行

时间:2017-03-17 08:29:18

标签: node.js webassembly

我正在尝试在node.js中运行一个webassembly模块,而我正在获得Wasm decoding failedResult。我认为我的问题是将节点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时,我可以加载模块并在浏览器中运行它。所以,我很确定这是我的问题,或者是一些兼容性问题。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您的节点版本使用较旧的V8前MVP版本,期望版本为0xC。您的工具链会发出now-stable MVP version 0x1

节点roughly follows Chrome releasesChrome 57添加了对MVP WebAssembly的支持。该页面显示Chrome 57的V8版本为5.7.492.65。

因此,Node中即将支持MVP。

或者,您可以使用较旧的Emscripten工具链。虽然它会很老:0xd是MVP之前的版本(0xd实际上与MVP相同,以模块为模)。