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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow