Go
Kompilacja krzyżowa
Szukaj…
Wprowadzenie
Kompilator Go może produkować pliki binarne dla wielu platform, tj. Procesorów i systemów. W przeciwieństwie do większości innych kompilatorów, nie ma szczególnych wymagań dotyczących kompilacji krzyżowej, jest równie łatwy w użyciu jak zwykła kompilacja.
Składnia
- GOOS = linux GOARCH = amd64 go build
Uwagi
Obsługiwane kombinacje docelowe systemu operacyjnego i architektury (źródło)
| $ GOOS | $ GOARCH |
|---|---|
| android | ramię |
| Darwin | 386 |
| Darwin | amd64 |
| Darwin | ramię |
| Darwin | arm64 |
| ważka | amd64 |
| freebsd | 386 |
| freebsd | amd64 |
| freebsd | ramię |
| linux | 386 |
| linux | amd64 |
| linux | ramię |
| linux | arm64 |
| linux | ppc64 |
| linux | ppc64le |
| linux | mips64 |
| linux | mips64le |
| netbsd | 386 |
| netbsd | amd64 |
| netbsd | ramię |
| openbsd | 386 |
| openbsd | amd64 |
| openbsd | ramię |
| plan9 | 386 |
| plan9 | amd64 |
| solaris | amd64 |
| Windows | 386 |
| Windows | amd64 |
Skompiluj wszystkie architektury za pomocą pliku Makefile
Ten Makefile będzie krzyżował pliki wykonywalne kompilacji i zipów dla systemów Windows, Mac i Linux (ARM i 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)
(bądź ostrożny, że Makefile potrzebuje twardych tabulatorów, a nie spacji )
Prosta kompilacja krzyżowa z kompilacją go
Z katalogu projektu uruchom komendę go build i określ docelowy system operacyjny i architekturę za pomocą zmiennych środowiskowych GOOS i GOARCH :
Kompilacja dla komputerów Mac (64-bitowych):
GOOS=darwin GOARCH=amd64 go build
Kompilowanie dla procesora Windows x86:
GOOS=windows GOARCH=386 go build
Możesz także ustawić ręcznie nazwę pliku wyjściowego pliku wykonywalnego, aby śledzić architekturę:
GOOS=windows GOARCH=386 go build -o appname_win_x86.exe
Od wersji 1.7 i nowszych możesz uzyskać listę wszystkich możliwych kombinacji GOOS i GOARCH z:
go tool dist list
(lub dla łatwiejszego zużycia maszyny go tool dist list -json )
Kompilacja krzyżowa przy użyciu gox
Kolejnym wygodnym rozwiązaniem kompilacji krzyżowej jest użycie gox : https://github.com/mitchellh/gox
Instalacja
Instalacja odbywa się bardzo łatwo poprzez uruchomienie go get github.com/mitchellh/gox . Wynikowy plik wykonywalny zostaje umieszczony w katalogu binarnym Go, np. /golang/bin lub ~/golang/bin . Upewnij się, że ten folder jest częścią ścieżki, aby użyć polecenia gox z dowolnej lokalizacji.
Stosowanie
Z poziomu folderu głównego projektu Go (gdzie wykonujesz np. gox go build ), uruchom gox , aby zbudować wszystkie możliwe pliki binarne dla dowolnej architektury (np. X86, ARM) i systemu operacyjnego (np. Linux, macOS, Windows), który jest dostępny.
Aby zbudować dla określonego systemu operacyjnego, użyj np. gox -os="linux" . Można również zdefiniować opcję architektury: gox -osarch="linux/amd64" .
Prosty przykład: skompiluj helloworld.go dla architektury uzbrojenia na komputerze z systemem Linux
Przygotuj helloworld.go (znajdź poniżej)
package main
import "fmt"
func main(){
fmt.Println("hello world")
}
Uruchom GOOS=linux GOARCH=arm go build helloworld.go
Skopiuj wygenerowany helloworld (wykonywalny przez ramię) na maszynę docelową.