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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow