[英]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, {}))
但是我得到這個錯誤:
所以我嘗試通過以下代碼使用MDN文檔中的 WebAssembly.instantiate()
:
const instantiate = (bytes, imports = {}) =>
WebAssembly.compile(bytes).then(m =>
WebAssembly.instantiate(m, imports)
)
我得到了另一個:
知道如何解決嗎?
從您的問題尚不清楚,但是進一步的注釋說明您將導入對象保留為{}
,導致實例化失敗。 WebAssembly使用雙重名稱空間,其中import對象完成WebAssembly.Module
的import 。 每次導入均指定為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.