node.js - 将 hello world 编译为 wasm 并在 Node 中运行

标签 node.js webassembly

我正在尝试在 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/

相关文章:

node.js - 属于很多关联添加外键到源模型,SequelizeDatabaseError : column "CategoryID" does not exist

javascript - Express 路由器 ID 问题 - 读取文本作为 ID

web - WebAssembly 程序会泄漏内存吗?

javascript - 如何使用 es6 导入加载 emscripten 生成的模块?

node.js - Node Js 检索并显示图像

Jade 模板内的javascript函数执行

firefox - 是否可以在 WebAssembly 中编写 WebExtension?

Rust Wasm Bindgen 返回对象但获取一个数字

rust - 如何在 Wasm (Rust) 中访问 JS 对象属性?

node.js - NodeJS 获取发布的数据 - 无框架