紀錄一下自己在用 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,這問題可以以以下方式解決:
- 安裝 Webassembly Advanced Tool 的 Binaryen
- 用 npm 安裝 wasm-opt
- 用 golang 安裝 wasm-opt
沒有留言:
張貼留言