Go
Kreuzzusammenstellung
Suche…
Einführung
Der Go-Compiler kann Binärdateien für viele Plattformen, dh Prozessoren und Systeme, erstellen. Im Gegensatz zu den meisten anderen Compilern gibt es keine besonderen Anforderungen für das Cross-Compilieren. Es ist so einfach zu verwenden wie das normale Compilieren.
Syntax
- GOOS = Linux GOARCH = Amd64 go build
Bemerkungen
Unterstützte Zielsystemkombinationen für Betriebssystem und Architektur (Quelle)
$ GOOS | $ GOARCH |
---|---|
Android | Arm |
Darwin | 386 |
Darwin | amd64 |
Darwin | Arm |
Darwin | arm64 |
Libelle | 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 |
Fenster | 386 |
Fenster | amd64 |
Kompilieren Sie alle Architekturen mit einem Makefile
Dieses Makefile wird ausführbare Dateien für Windows, Mac und Linux (ARM und x86) zusammenstellen und komprimieren.
# 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)
( Seien Sie vorsichtig, dass Makefile harte Tabs und keine Leerzeichen benötigt. )
Einfache Cross-Kompilierung mit Go Build
Führen Sie in Ihrem Projektverzeichnis den Befehl go build
und geben Sie das Betriebssystem und das Architekturziel mit den Umgebungsvariablen GOOS
und GOARCH
:
Kompilieren für Mac (64-Bit):
GOOS=darwin GOARCH=amd64 go build
Kompilieren für Windows x86-Prozessor:
GOOS=windows GOARCH=386 go build
Möglicherweise möchten Sie auch den Dateinamen der ausführbaren Ausgabedatei manuell festlegen, um die Architektur zu verfolgen:
GOOS=windows GOARCH=386 go build -o appname_win_x86.exe
Ab Version 1.7 erhalten Sie eine Liste aller möglichen Kombinationen von GOOS und GOARCH mit:
go tool dist list
(oder für einen einfacheren Maschinenverbrauch go tool dist list -json
)
Kreuzzusammenstellung mit gox
Eine andere praktische Lösung für die Cross-Kompilierung ist die Verwendung von gox
: https://github.com/mitchellh/gox
Installation
Die Installation ist sehr einfach, indem Sie go get github.com/mitchellh/gox
ausführen. Die resultierende ausführbare Datei wird in Gos Binärverzeichnis /golang/bin
, z. B. /golang/bin
oder ~/golang/bin
. Stellen Sie sicher, dass dieser Ordner Teil Ihres Pfads ist, um den Befehl gox
von einem beliebigen Ort aus zu verwenden.
Verwendungszweck
gox
Sie gox
dem Root-Ordner eines Go-Projekts (wo Sie z. B. go build
ausführen) aus, um alle möglichen Binaries für jede verfügbare Architektur (z. B. x86, ARM) und Betriebssystem (z. B. Linux, macOS, Windows) zu erstellen.
Um für ein bestimmtes Betriebssystem zu bauen, verwenden gox -os="linux"
stattdessen zB gox -os="linux"
. Auch die Architekturoption könnte definiert werden: gox -osarch="linux/amd64"
.
Einfaches Beispiel: Kompilieren Sie helloworld.go für die Architektur des Arms auf einem Linux-Computer
Bereite helloworld.go vor (siehe unten)
package main
import "fmt"
func main(){
fmt.Println("hello world")
}
Führen Sie GOOS=linux GOARCH=arm go build helloworld.go
Kopieren Sie die generierte helloworld
Datei (Arm- helloworld
) auf Ihren Zielcomputer.