使用 Wasmtime 和 Wasm3 将 Golang 编译为 Wasm 时出现错误
使用 GOOS=js 将 Golang 代码编译为 WebAssembly (Wasm) GOARCH=wasm go使用 Wasmtime 或 Wasm3 执行时,build -o main.wasm 可能会导致错误。让我们调查这些错误并探索可能的解决方案。
Wasmtime Error:
Error: failed to run main module `main.wasm` Caused by: 0: failed to instantiate "main.wasm" 1: unknown import: `go::debug` has not been defined
该错误表明Wasmtime在运行时遇到了未解析的导入(go::debug),提示编译后的Wasm模块缺少对此的定义import.
Wasm3 Error:
Error: function lookup failed ('_start')
Wasm3 在函数查找过程中遇到错误,提示Wasm 模块没有定义入口点函数(_start)。
解决方案:
根据提供的响应,原始方法在外部编译 Golang 为 Wasm 时存在局限性浏览器。建议使用以下选项来解决错误:
将 Node.js 与 wasm_exec.js shim 一起使用:
node wasm_exec.js main.wasm
这允许在浏览器环境之外执行。
使用 TinyGo 和 Wasi 支持进行编译:
tinygo build -target=wasi -o main.wasm main.go
TinyGo 支持使用 Wasi 编译为 Wasm,它应该与 Wasmtime 一起使用。
实验性支持 Wasm 的 Golang 编译:
GOOS=wasip1 GOARCH=wasm gotip build -o main.wasm
这需要从源代码编译 Go 并启用最新的实验性功能,但应该允许对于使用 Wasmtime 直接执行。
对于这些特定错误,建议尝试选项 1(使用 Node.js 和 wasm_exec.js),或选项 2(使用 TinyGo 和 Wasi 编译)支持)如果需要与 Wasmtime 独立运行。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3