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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow