2022年10月26日 星期三

紀錄一下用 tinygo 建立 wasm 遇到的問題

紀錄一下自己在用 tinygo 建立 wasm 時遇到的問題

1. error: could not autodetect root directory, set the TINYGOROOT environment variable to override

這是因為我在 go install 的 folder 有 tinygo,但 tinygo 的 folder 沒有加入 PATH 導致

以 windows 來說,用 go install 執行指令安裝軟體,例如安裝 pkgsite ,指令如下

D:\> go get golang.org/x/pkgsite
D:\> go install golang.org/x/pkgsite/cmd/pkgsite

這樣子,在 %USERPROFILE%\go\bin 就會有 pkgsite.exe 這檔案了。

又因為 go 在安裝時,就會把 %USERPROFILE%\go\bin 加入 PATH 了,相當於我能夠直接打開終端機執行 pkgsite

C:\workspace> pkgsite -http :6060

然而, tinygo 好像需要某些檔案,所以用這種方式安裝的 tinygo 就會要求要 TINYGOROOT 這變數。

最簡單的辦法把 %USERPROFILE%\go\bin 的 tinygo 移除,然後乖乖按照官網教學來安裝

2. runtime error

出現以下 error 的狀況

# runtime
d:\tinygo\src\runtime\gc_globals_conservative.go:13:6: markGlobals redeclared in this block
d:\tinygo\src\runtime\gc_globals.go:14:6:       other declaration of markGlobals

這是因為我是用覆蓋檔案的方式升級 tinygo。

tinygo 每次 release 都會好心提供各 OS 用的壓縮檔

然後我就只是把 tinygo 最新版的壓縮檔下載下來,直接覆蓋舊檔案。


而這導致執行 tinygo 出現此錯誤。

上網查了一下,可能是原本的檔案有改過名稱之類,導致有函數或變數被重複定義。


要解決的話,直接把原本的 tinygo folder 刪除,然後解壓最新版的壓縮檔。

3. 找不到 wasl-opt

error: could not find wasm-opt, set the WASMOPT environment variable to override

不知道為什麼編譯需要安裝 wasm-opt,這問題可以以以下方式解決:

  1. 安裝 Webassembly Advanced ToolBinaryen
  2. npm 安裝 wasm-opt
  3. golang 安裝 wasm-opt

沒有留言:

張貼留言