Golang 到 wasm 编译

问题描述 投票:0回答:1

我使用 Golang 代码编译 wasm

GOOS=js GOARCH=wasm go build -o main.wasm

尝试使用 wasmtime 执行时出现以下错误

wasmtime main.wasm 
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

用 wasm3 执行时,我得到

wasm3 main.wasm 
Error: function lookup failed ('_start')

这些错误是什么意思以及如何解决它们?

go webassembly
1个回答
0
投票

目前还没有办法在broswer之外使用go编译器生成wasm。您示例中的

main.wasm
旨在与
wasm_exec.js
垫片一起使用。但是,有多种方法可以在 Node 中使用它。 This 是我之前关于同一主题的回答。所以,你的选择是:

  1. 使用节点,如上面链接的问题
node wasm_exec.js main.wasm
  1. 使用 tinygo 编译,支持 wasi
tinygo build -target=wasi -o main.wasm main.go

wasmtime
应该运行得很好。

  1. 秘密选项三:Go 实际上在浏览器之外有非常非常前沿的 wasm 支持。我认为 go 编译器的任何发行版本都没有启用该功能,因此这意味着您可能必须从源代码编译 go。编译后,你的命令应该变成:
GOOS=wasip1 GOARCH=wasm go build -o main.wasm
没有其他变化。

对于您的问题,我会说 (1),以便至少有一些工作,以及 (2) 如果您想使用

wasmtime

 独立运行它。一个新的 go 版本也应该很快就会到来,如果你想等待而不自己编译的话。

© www.soinside.com 2019 - 2024. All rights reserved.