>  기사  >  백엔드 개발  >  Go 코드를 WebAssembly(wasm)로 컴파일할 때 발생하는 오류를 해결하는 방법은 무엇입니까?

Go 코드를 WebAssembly(wasm)로 컴파일할 때 발생하는 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-24 05:28:30972검색

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" 명령을 사용하면 wasmtime 또는 wasm3을 사용하여 결과 main.wasm 파일을 실행할 때 오류가 발생할 수 있습니다.

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( Wasi) 지원.

이러한 솔루션을 따르면 wasmtime 및 wasm3을 사용하여 wasm으로 컴파일된 Go 코드를 성공적으로 실행할 수 있습니다.

위 내용은 Go 코드를 WebAssembly(wasm)로 컴파일할 때 발생하는 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.