Go
Cross Compilation
Sök…
Introduktion
Go-kompilatorn kan producera binärer för många plattformar, dvs processorer och system. Till skillnad från de flesta andra kompilatorer finns det inget specifikt krav på korssammanställning, det är lika lätt att använda som vanlig sammanställning.
Syntax
- GOOS = linux GOARCH = amd64 go build
Anmärkningar
Stödda kombinationer av operativsystem och arkitektur (källa)
$ GOOS | $ GOARCH |
---|---|
android | ärm |
darwin | 386 |
darwin | amd64 |
darwin | ärm |
darwin | arm64 |
trollslända | amd64 |
freebsd | 386 |
freebsd | amd64 |
freebsd | ärm |
linux | 386 |
linux | amd64 |
linux | ärm |
linux | arm64 |
linux | ppc64 |
linux | ppc64le |
linux | mips64 |
linux | mips64le |
NetBSD | 386 |
NetBSD | amd64 |
NetBSD | ärm |
openbsd | 386 |
openbsd | amd64 |
openbsd | ärm |
plan9 | 386 |
plan9 | amd64 |
solaris | amd64 |
fönster | 386 |
fönster | amd64 |
Kompilera alla arkitekturer med en Makefile
Denna Makefile kommer att korsa kompilering och zip-kod för körbara filer för Windows, Mac och Linux (ARM och 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)
(var försiktig med att Makefile behöver hårda flikar inte mellanrum )
Enkel korssammanställning med go build
GOOS
kommandot go build
från din projektkatalog och ange operativsystem och arkitekturmål med GOOS
och GOARCH
:
Kompilering för Mac (64-bitars):
GOOS=darwin GOARCH=amd64 go build
Kompilering för Windows x86-processor:
GOOS=windows GOARCH=386 go build
Du kanske också vill ställa in filnamnet på den utmatning som kan köras manuellt för att hålla reda på arkitekturen:
GOOS=windows GOARCH=386 go build -o appname_win_x86.exe
Från version 1.7 och framåt kan du få en lista över alla möjliga kombinationer av GOOS och GOARCH med:
go tool dist list
(eller för enklare maskinförbrukning, go tool dist list -json
)
Kors sammanställning med hjälp av gox
En annan bekväm lösning för korssammanställning är användningen av gox
: https://github.com/mitchellh/gox
Installation
Installationen görs mycket enkelt genom att utföra go get github.com/mitchellh/gox
. Den resulterande körbara placeras i Go: s binära katalog, t.ex. /golang/bin
eller ~/golang/bin
. Se till att den här mappen är en del av din sökväg för att använda gox
kommandot från en godtycklig plats.
Användande
Utifrån ett Go-projektets rotmapp (där du utför t.ex. go build
), kör gox
för att bygga alla möjliga binärer för alla arkitekturer (t.ex. x86, ARM) och operativsystem (t.ex. Linux, macOS, Windows) som är tillgängliga.
För att bygga för ett visst operativsystem, använd t.ex. gox -os="linux"
istället. Även arkitekturalternativet kan definieras: gox -osarch="linux/amd64"
.
Enkelt exempel: Kompilera helloworld.go för armarkitektur på Linux-maskin
Förbered helloworld.go (hitta nedan)
package main
import "fmt"
func main(){
fmt.Println("hello world")
}
Kör GOOS=linux GOARCH=arm go build helloworld.go
Kopiera genererad helloworld
(arm körbar) till din målmaskin.