WebAssembly LinkError 模块="env"
WebAssembly LinkError module="env"
我正在 运行 在 webassembly.org 上学习教程,现在我想从我自己的页面 运行 hello.wasm
。
我正在按照教程的说明使用 Emscripten 编译代码。
在我的 index.html
中关注 these instructions 我在做:
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 docs 中的 WebAssembly.instantiate()
代码:
const instantiate = (bytes, imports = {}) =>
WebAssembly.compile(bytes).then(m =>
WebAssembly.instantiate(m, imports)
)
我得到了一个不同的:
知道如何解决吗?
显然,您的示例模块想要从名为 "env"
的模块中导入一些内容。但是,您提供的 imports
对象是空的。要成功实例化您的模块,您需要提供一个 {env: {...}}
形式的导入对象,其中点是对应于从 "env"
.
进行的每个导入的属性
您的问题并不清楚,但进一步的评论解释说您将导入对象保留为 {}
,导致实例化失败。 WebAssembly 使用双命名空间,其中 import object fulfills the WebAssembly.Module
's imports. Each import is specified 作为模块+字段+种类,JavaScript 导入对象必须满足。
Emscripten 已经生成 HTML+JS 为您加载 hello.wasm
,包括 WebAssembly 导入对象。 Emscripten 生成的内容非常大,因为它模拟了 OS。导入对象提供所有系统调用(到 JavaScript)。您必须将这些传递给示例才能工作...或者只使用 Emscripten 已经生成的那些。
您正在使用的代码需要一个名为 env
的模块。 Emscripten 包含如下代码:
let importObject = {
env: { foo: () => 42, bar: () => 3.14 }
};
也就是前面提到的double namespace:env
是模块,foo
/ bar
是字段。他们的类型是function
。 WebAssembly 支持其他类型的导入和导出:table、内存和全局。
缺少单个模块或模块的字段,或者类型不匹配,会导致实例化失败。
我正在 运行 在 webassembly.org 上学习教程,现在我想从我自己的页面 运行 hello.wasm
。
我正在按照教程的说明使用 Emscripten 编译代码。
在我的 index.html
中关注 these instructions 我在做:
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 docs 中的 WebAssembly.instantiate()
代码:
const instantiate = (bytes, imports = {}) =>
WebAssembly.compile(bytes).then(m =>
WebAssembly.instantiate(m, imports)
)
我得到了一个不同的:
知道如何解决吗?
显然,您的示例模块想要从名为 "env"
的模块中导入一些内容。但是,您提供的 imports
对象是空的。要成功实例化您的模块,您需要提供一个 {env: {...}}
形式的导入对象,其中点是对应于从 "env"
.
您的问题并不清楚,但进一步的评论解释说您将导入对象保留为 {}
,导致实例化失败。 WebAssembly 使用双命名空间,其中 import object fulfills the WebAssembly.Module
's imports. Each import is specified 作为模块+字段+种类,JavaScript 导入对象必须满足。
Emscripten 已经生成 HTML+JS 为您加载 hello.wasm
,包括 WebAssembly 导入对象。 Emscripten 生成的内容非常大,因为它模拟了 OS。导入对象提供所有系统调用(到 JavaScript)。您必须将这些传递给示例才能工作...或者只使用 Emscripten 已经生成的那些。
您正在使用的代码需要一个名为 env
的模块。 Emscripten 包含如下代码:
let importObject = {
env: { foo: () => 42, bar: () => 3.14 }
};
也就是前面提到的double namespace:env
是模块,foo
/ bar
是字段。他们的类型是function
。 WebAssembly 支持其他类型的导入和导出:table、内存和全局。
缺少单个模块或模块的字段,或者类型不匹配,会导致实例化失败。