簡體   English   中英

WebAssembly LinkError模塊=“ env”

[英]WebAssembly LinkError module=“env”

我正在webassembly.org上運行教程,現在我想從自己的頁面運行hello.wasm 我正在按照教程的說明使用Emscripten編譯代碼。

按照我的index.html 這些說明進行操作:

const instantiate = (bytes, imports = {}) =>
  WebAssembly.compile(bytes).then(m =>
    new WebAssembly.Instance(m, imports)
  )

fetch('hello.wasm')
  .then(response => response.arrayBuffer())
  .then(bytes => instantiate(bytes, {}))

但是我得到這個錯誤:

引發RangeError

所以我嘗試通過以下代碼使用MDN文檔中的 WebAssembly.instantiate()

const instantiate = (bytes, imports = {}) =>
  WebAssembly.compile(bytes).then(m =>
    WebAssembly.instantiate(m, imports)
  )

我得到了另一個:

LinkError

知道如何解決嗎?

從您的問題尚不清楚,但是進一步的注釋說明您將導入對象保留為{} ,導致實例化失敗。 WebAssembly使用雙重名稱空間,其中import對象完成WebAssembly.Moduleimport 每次導入均指定為module + field + kind,JavaScript導入對象必須滿足此要求。

Emscripten已經生成了HTML + JS,可以為您加載hello.wasm ,包括WebAssembly導入對象。 Emscripten生成的內容非常大,因為它可以模擬操作系統。 導入對象將提供所有系統調用(至JavaScript)。 您必須將它們傳遞給示例才能使用...或僅使用已經生成的Emscripten。

您正在使用的代碼需要一個名為env的模塊。 Emscripten包含以下代碼:

let importObject = {
  env: { foo: () => 42, bar: () => 3.14 }
};

那是我前面提到的雙重名稱空間: env是一個模塊,而foo / bar是字段。 它們的類型是function WebAssembly支持其他類型的導入和導出:表,內存和全局。

缺少單個模塊,模塊字段或類型不匹配會導致實例化失敗。

顯然,您的示例模塊希望從名為"env"的模塊中導入某些內容。 但是,您提供的imports對象為空。 為了成功實例化模塊,您需要提供{env: {...}}形式的import對象,其中的點是與每個從"env"進行的每次導入相對應的屬性。

暫無
暫無

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

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