使用Wasmtime 和Wasm3 將Golang 編譯為Wasm 時出現錯誤
使用GOOS=js 將Golang 程式碼編譯為WebAssembly (WARCasm) GO =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: 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 支援進行編譯:
TinyGo 支援使用Wasi 編譯為Wasm,它應該可以與Wasmtime.
tinygo build -target=wasi -o main.wasm main.go支援Wasm 的實驗性Golang 編譯:
這需要從原始碼編譯Go 並啟用最新的實驗功能,但應該允許直接執行Wasmtime.
對於這些特定錯誤,建議嘗試選項1(使用Node.js 和wasm_exec.js),或選項2(使用TinyGo 和Wasi 支援進行編譯)(如果執行)需要與Wasmtime 獨立。免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3