我读过很多关于在 node.js 中运行 wasm 文件的文章。每当我测试代码时,它都会抛出此错误
[TypeError: WebAssembly.instantiate(): Import #0 module="wasi_snapshot_preview1" 错误:模块不是对象或函数]
然后它不会在结果中显示任何内容。我正在使用此代码:
const sp = {
env: {
memoryBase: 0,
tableBase: 0,
memory: new WebAssembly.Memory({
initial: 256
}),
table: new WebAssembly.Table({
initial: 0,
element: 'anyfunc'
})
},
imports: {
imported_func: arg => {
console.log(arg);
}
}
}
const fs = require('fs')
, wasm = WebAssembly.instantiate(new Uint8Array(fs.readFileSync('./test.wasm')), sp)
.then(result => console.log(result));
Run Code Online (Sandbox Code Playgroud)
此代码抛出上述错误。
有什么我做错了吗?
解决方案:
我的代码没有任何问题,而是我编译代码的方式有问题。而不是使用
em++ test.cpp -o test.wasm
Run Code Online (Sandbox Code Playgroud)
我应该用过:
em++ -O1 test.cpp -o test.wasm -s WASM=1
Run Code Online (Sandbox Code Playgroud)
更改test.wasm为test.js应该也有效:
em++ -O1 test.cpp -o test.js -s WASM=1
Run Code Online (Sandbox Code Playgroud)
使用 .wasm 作为输出类型或-s STANDALONE_WASM需要运行时wasi_snapshot_preview1支持。
报错如下:
[TypeError: WebAssembly.instantiate(): Import #0 module="wasi_snapshot_preview1" 错误:模块不是对象或函数]
这表明您的 WebAssembly 模块test.wasm正在等待名为 的导入wasi_snapshot_preview1,这是实例化它所必需的。这与 Node 环境无关,您会在浏览器中看到相同的错误。
您如何构建和编译 WebAssembly 模块?此导入表明您正在使用 WASI。
我建议从一个更简单的 WebAssembly 示例开始。
| 归档时间: |
|
| 查看次数: |
3780 次 |
| 最近记录: |