ホームページ  >  記事  >  バックエンド開発  >  Go コードを WebAssembly (wasm) にコンパイルするときに発生したエラーを解決するにはどうすればよいですか?

Go コードを WebAssembly (wasm) にコンパイルするときに発生したエラーを解決するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-24 05:28:301035ブラウズ

How to Resolve Errors Encountered When Compiling Go Code to WebAssembly (wasm)?

Golang から wasm へのコンパイル: エラー分析と解決策

「GOOS=js GOARCH=」を使用して Golang コードを WebAssembly (wasm) にコンパイルする場合wasm go build -o main.wasm" コマンドを実行すると、結果の main.wasm ファイルを wasmtime または wasm3 で実行するとエラーが発生する可能性があります。

wasmtime からのエラー:

failed to instantiate "main.wasm"
unknown import: `go::debug` has not been defined

wasm3 からのエラー:

function lookup failed ('_start')

これらのエラーは、次の理由で発生する可能性があります:

  • go::debug import not定義済み: Go コンパイラーでコンパイルされた wasm モジュールは、ブラウザ環境内での使用を目的としており、syscall サポートを提供するには wasm_exec.js のような shim が必要です。 Wasmtime は、このサポートを独自に提供できません。
  • _start 関数が見つかりません: wasm3 は、エントリ ポイントとして wasm モジュール内の _start 関数を予期します。ただし、Go コンパイラーは、wasm をターゲットとする場合、 _start 関数を生成しません。

解決策:

これらのエラーを解決するには、いくつかのオプションがあります:

  • wasm_exec.js shim で Node.js を使用する: Node.js と wasm_exec.js shim を使用して main.wasm ファイルを実行します。このメソッドは、必要な syscall サポートを提供します。
node wasm_exec.js main.wasm
  • TinyGo および Wasi サポートによるコンパイル: TinyGo は、WebAssembly を使用した wasm へのコンパイルをサポートする代替 Go コンパイラーです。システム インターフェイス (Wasi) のサポート。このアプローチにより、wasmtime を使用してコードをスタンドアロンで実行できます。
tinygo build -target=wasi -o main.wasm main.go
  • 最先端の Go コンパイラーのサポート (実験的): Go コンパイラーの最新バージョンブラウザ外で wasm にコンパイルするための実験的なサポートが含まれています。これを有効にするには、ソースからコンパイラをビルドします。
go install golang.org/dl/gotip@latest
gotip download
GOOS=wasip1 GOARCH=wasm gotip build -o main.wasm

Go コンパイラをビルドしたら、更新された「gotip」コマンドを使用して、wasip1 でコードを wasm にコンパイルできます ( Wasi) サポート。

これらの解決策に従うことで、wasmtime と wasm3 を使用して wasm にコンパイルされた Go コードを正常に実行できるはずです。

以上がGo コードを WebAssembly (wasm) にコンパイルするときに発生したエラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。