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ą.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow