Go
Cross-compilatie
Zoeken…
Invoering
De Go-compiler kan binaries produceren voor veel platforms, dat wil zeggen processors en systemen. In tegenstelling tot de meeste andere compilers, is er geen specifieke vereiste voor cross-compileren, het is net zo gemakkelijk te gebruiken als regulier compileren.
Syntaxis
- GOOS = linux GOARCH = amd64 go build
Opmerkingen
Ondersteunde combinaties van besturingssysteem en architectuur (bron)
$ GOOS | $ GOARCH |
---|---|
android | arm |
darwin | 386 |
darwin | amd64 |
darwin | arm |
darwin | arm64 |
libel | amd64 |
freebsd | 386 |
freebsd | amd64 |
freebsd | arm |
linux | 386 |
linux | amd64 |
linux | arm |
linux | arm64 |
linux | ppc64 |
linux | ppc64le |
linux | MIPS64 |
linux | mips64le |
NetBSD | 386 |
NetBSD | amd64 |
NetBSD | arm |
openbsd | 386 |
openbsd | amd64 |
openbsd | arm |
plan9 | 386 |
plan9 | amd64 |
solaris | amd64 |
ramen | 386 |
ramen | amd64 |
Compileer alle architecturen met behulp van een Makefile
Deze Makefile is geschikt voor het compileren en inpakken van uitvoerbare bestanden voor Windows, Mac en Linux (ARM en 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)
(wees voorzichtig dat Makefile's harde tabbladen niet spaties nodig hebben )
Eenvoudige kruiscompilatie met go build
Voer vanuit uw projectmap de opdracht go build
uit en geef het besturingssysteem en het architectuurdoel op met de omgevingsvariabelen GOOS
en GOARCH
:
Compileren voor Mac (64-bit):
GOOS=darwin GOARCH=amd64 go build
Compileren voor Windows x86-processor:
GOOS=windows GOARCH=386 go build
Misschien wilt u ook de bestandsnaam van het uitvoerbare uitvoerbestand instellen om de architectuur bij te houden:
GOOS=windows GOARCH=386 go build -o appname_win_x86.exe
Vanaf versie 1.7 en verder kunt u een lijst krijgen met alle mogelijke GOOS- en GOARCH-combinaties met:
go tool dist list
(of voor eenvoudiger machinegebruik go tool dist list -json
)
Cross-compilatie met gox
Een andere handige oplossing voor cross-compilatie is het gebruik van gox
: https://github.com/mitchellh/gox
Installatie
De installatie is heel eenvoudig door het uitvoeren van go get github.com/mitchellh/gox
. Het resulterende uitvoerbare bestand wordt in de binaire map van Go geplaatst, bijvoorbeeld /golang/bin
of ~/golang/bin
. Zorg ervoor dat deze map deel uitmaakt van uw pad om de gox
opdracht vanaf een willekeurige locatie te gebruiken.
Gebruik
Voer vanuit de rootmap van een Go-project (waar u bijv. go build
uitvoert) gox
uit om alle mogelijke binaries te bouwen voor elke architectuur (bijv. X86, ARM) en besturingssysteem (bijv. Linux, macOS, Windows) die beschikbaar is.
Gebruik in plaats daarvan bijvoorbeeld gox -os="linux"
om te bouwen voor een bepaald besturingssysteem. Ook kan de architectuuroptie worden gedefinieerd: gox -osarch="linux/amd64"
.
Eenvoudig voorbeeld: compileer helloworld.go voor armarchitectuur op Linux-machine
Bereid helloworld.go voor (zie hieronder)
package main
import "fmt"
func main(){
fmt.Println("hello world")
}
Run GOOS=linux GOARCH=arm go build helloworld.go
Kopieer het gegenereerde helloworld
(uitvoerbaar bestand) bestand naar uw doelmachine.