수색…
소개
Go 컴파일러는 많은 플랫폼, 즉 프로세서 및 시스템 용 바이너리를 생성 할 수 있습니다. 대부분의 다른 컴파일러와 달리, 크로스 컴파일에 대한 특별한 요구 사항은 없으며, 일반적인 컴파일과 같이 사용하기 쉽습니다.
통사론
- GOOS = linux GOARCH = amd64 go 빌드
비고
지원되는 운영 체제 및 아키텍처 대상 조합 (원본)
$ GOOS | $ GOARCH |
---|---|
기계적 인조 인간 | 팔 |
다윈 | 386 |
다윈 | amd64 |
다윈 | 팔 |
다윈 | arm64 |
잠자리 | amd64 |
freebsd | 386 |
freebsd | amd64 |
freebsd | 팔 |
리눅스 | 386 |
리눅스 | amd64 |
리눅스 | 팔 |
리눅스 | arm64 |
리눅스 | ppc64 |
리눅스 | ppc64le |
리눅스 | mips64 |
리눅스 | mips64le |
netbsd | 386 |
netbsd | amd64 |
netbsd | 팔 |
openbsd | 386 |
openbsd | amd64 |
openbsd | 팔 |
계획 9 | 386 |
계획 9 | amd64 |
솔라리스 | amd64 |
창문들 | 386 |
창문들 | amd64 |
Makefile을 사용하여 모든 아키텍처 컴파일
이 Makefile은 Windows, Mac 및 Linux (ARM 및 x86)의 실행 파일을 컴파일하고 압축합니다.
# Replace demo with your desired executable name
appname := demo
sources := $(wildcard *.go)
build = GOOS=$(1) GOARCH=$(2) go build -o build/$(appname)$(3)
tar = cd build && tar -cvzf $(1)_$(2).tar.gz $(appname)$(3) && rm $(appname)$(3)
zip = cd build && zip $(1)_$(2).zip $(appname)$(3) && rm $(appname)$(3)
.PHONY: all windows darwin linux clean
all: windows darwin linux
clean:
rm -rf build/
##### LINUX BUILDS #####
linux: build/linux_arm.tar.gz build/linux_arm64.tar.gz build/linux_386.tar.gz build/linux_amd64.tar.gz
build/linux_386.tar.gz: $(sources)
$(call build,linux,386,)
$(call tar,linux,386)
build/linux_amd64.tar.gz: $(sources)
$(call build,linux,amd64,)
$(call tar,linux,amd64)
build/linux_arm.tar.gz: $(sources)
$(call build,linux,arm,)
$(call tar,linux,arm)
build/linux_arm64.tar.gz: $(sources)
$(call build,linux,arm64,)
$(call tar,linux,arm64)
##### DARWIN (MAC) BUILDS #####
darwin: build/darwin_amd64.tar.gz
build/darwin_amd64.tar.gz: $(sources)
$(call build,darwin,amd64,)
$(call tar,darwin,amd64)
##### WINDOWS BUILDS #####
windows: build/windows_386.zip build/windows_amd64.zip
build/windows_386.zip: $(sources)
$(call build,windows,386,.exe)
$(call zip,windows,386,.exe)
build/windows_amd64.zip: $(sources)
$(call build,windows,amd64,.exe)
$(call zip,windows,amd64,.exe)
( Makefile의 하드 탭은 공백이 아닌지 조심해야한다)
이동 빌드로 간단한 크로스 컴파일
프로젝트 디렉토리에서 GOARCH
go build
명령을 실행하고 GOOS
및 GOARCH
환경 변수를 사용하여 운영 체제 및 아키텍처 대상을 지정하십시오.
Mac (64 비트) 용 컴파일 :
GOOS=darwin GOARCH=amd64 go build
Windows x86 프로세서 용 컴파일 :
GOOS=windows GOARCH=386 go build
아키텍처 추적을 위해 수동으로 실행 파일의 파일 이름을 설정할 수도 있습니다.
GOOS=windows GOARCH=386 go build -o appname_win_x86.exe
버전 1.7 이상에서는 GOOS와 GOARCH의 가능한 조합 목록을 다음과 함께 얻을 수 있습니다.
go tool dist list
(또는 더 쉬운 기계 소비를 go tool dist list -json
)
gox를 사용하여 교차 컴파일
크로스 컴파일을위한 또 다른 편리한 솔루션은 gox
의 사용법입니다 : https://github.com/mitchellh/gox
설치
설치는 go get github.com/mitchellh/gox
를 실행하여 매우 쉽게 수행됩니다. 결과 실행 파일은 Go의 바이너리 디렉토리 (예 : /golang/bin
또는 ~/golang/bin
됩니다. 임의의 위치에서 gox
명령을 사용하려면이 폴더가 경로의 일부인지 확인하십시오.
용법
Go 프로젝트의 루트 폴더 (예 : go build
를 수행하는 곳)에서 gox
를 실행하여 사용 가능한 아키텍처 (예 : x86, ARM) 및 운영 체제 (예 : Linux, macOS, Windows)에 대한 가능한 모든 바이너리를 빌드하십시오.
특정 운영 체제 용으로 빌드하려면 예를 들어 gox -os="linux"
대신 사용하십시오. 또한 아키텍처 옵션을 정의 할 수 있습니다 : gox -osarch="linux/amd64"
.
간단한 예제 : Linux 컴퓨터에서 arm 아키텍처 용 helloworld.go 컴파일
helloworld.go 준비 (아래에서 찾으십시오)
package main
import "fmt"
func main(){
fmt.Println("hello world")
}
GOOS=linux GOARCH=arm go build helloworld.go
실행 GOOS=linux GOARCH=arm go build helloworld.go
생성 된 helloworld
(arm 실행 파일) 파일을 대상 시스템에 복사 합니다.