簡體   English   中英

實例化 WASM 模塊時出錯:“模塊不是 object 或函數”

[英]Error instantiating WASM module: "module is not an object or function"

我正在嘗試在 node.js 本地實例化 a.wasm 文件。目標是在本地運行二進制文件並重現 web 頁面的功能。 這是我的最小可重現示例:

const fetch = require("node-fetch");

const importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

fetch('https://www.supremenewyork.com/ticket.wasm').then(response =>
  response.arrayBuffer()
).then(bytes => {
  let mod = new WebAssembly.Module(bytes);
  let instance = new WebAssembly.Instance(mod, importObject);
  instance.exports.exported_func();
})

我得到的錯誤是:

TypeError: WebAssembly.Instance(): Import #0 module="wasi_unstable" 錯誤:模塊不是 object 或 function

我看到一些類似問題的問題,但沒有提供真正的解決方案。 這是我第一次使用 wasm,所以我很迷茫。

您的模塊似乎依賴於wasi_unstable API。 如果你想加載它,你需要一個 API 的實現。

要准確查看您的模塊需要哪些導入,您可以分別使用wasm2watwasmdis工具。

如果你使用 emscripten 構建了你的 wasm 模塊,那么推薦的做法是讓 emscripten 生成 JS 來實現這些 API,並為你加載模塊。

如果您使用 wasi-sdk 構建您的 wasm 模塊,那么您需要某種用於 WASI API 的 web polyfill。

這將使錯誤 go 消失:

const importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    },
    wasi_unstable: () => {}
  }
};

試試這個

const importObject = {
    wasi_unstable: {
        imported_func: function(args) {
            console.log(args);
        }
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM