Recherche…


Introduction

Le compilateur Go peut produire des binaires pour de nombreuses plates-formes, c'est-à-dire des processeurs et des systèmes. Contrairement à la plupart des autres compilateurs, il n’ya pas d’exigence spécifique à la compilation croisée, elle est aussi simple à utiliser que la compilation normale.

Syntaxe

  • GOOS = linux GOARCH = amd64 go build

Remarques

Combinaisons de système d'exploitation et de cible d'architecture prises en charge (source)

$ GOOS $ GOARCH
Android bras
Darwin 386
Darwin amd64
Darwin bras
Darwin arm64
libellule amd64
freebsd 386
freebsd amd64
freebsd bras
linux 386
linux amd64
linux bras
linux arm64
linux ppc64
linux ppc64le
linux mips64
linux mips64le
netbsd 386
netbsd amd64
netbsd bras
openbsd 386
openbsd amd64
openbsd bras
plan9 386
plan9 amd64
Solaris amd64
les fenêtres 386
les fenêtres amd64

Compiler toutes les architectures en utilisant un Makefile

Ce Makefile recoupera et compilera les exécutables pour Windows, Mac et Linux (ARM et 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)

(Faites attention à ce que le fichier Makefile nécessite des onglets durs et non des espaces )

Compilation croisée simple avec go build

À partir du répertoire de votre projet, exécutez la commande go build et spécifiez la cible du système d'exploitation et de l'architecture avec les variables d'environnement GOOS et GOARCH :

Compilation pour Mac (64 bits):

GOOS=darwin GOARCH=amd64 go build

Compilation pour Windows x86:

GOOS=windows GOARCH=386 go build

Vous pouvez également définir manuellement le nom du fichier exécutable de sortie pour suivre l'architecture:

GOOS=windows GOARCH=386 go build -o appname_win_x86.exe

A partir de la version 1.7 et suivantes, vous pouvez obtenir une liste de toutes les combinaisons GOOS et GOARCH possibles avec:

go tool dist list

(ou pour faciliter la consommation de la machine, go tool dist list -json )

Compilation croisée en utilisant gox

Une autre solution pratique pour la compilation croisée est l'utilisation de gox : https://github.com/mitchellh/gox

Installation

L'installation se fait très facilement en exécutant go get github.com/mitchellh/gox . L'exécutable résultant est placé dans le répertoire binaire de Go, par exemple /golang/bin ou ~/golang/bin . Assurez-vous que ce dossier fait partie de votre chemin afin d'utiliser la commande gox partir d'un emplacement arbitraire.

Usage

Dans le dossier racine du projet Go (où vous exécutez par exemple la go build ), exécutez gox afin de créer tous les binaires possibles pour toute architecture (par exemple x86, ARM) et système d'exploitation (par exemple Linux, macOS, Windows).

Pour construire pour un certain système d'exploitation, utilisez par exemple gox -os="linux" place. L'option d'architecture pourrait également être définie: gox -osarch="linux/amd64" .

Exemple simple: compiler helloworld.go pour une architecture de bras sur une machine Linux

Préparez helloworld.go (trouvez ci-dessous)

package main

import "fmt"

func main(){
        fmt.Println("hello world")
}

Exécuter GOOS=linux GOARCH=arm go build helloworld.go

Copiez le helloworld généré helloworld (arm executable) sur votre machine cible.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow