Buscar..


Introducción

El compilador Go puede producir binarios para muchas plataformas, es decir, procesadores y sistemas. A diferencia de la mayoría de los otros compiladores, no hay requisitos específicos para la compilación cruzada, es tan fácil de usar como la compilación regular.

Sintaxis

  • GOOS = linux GOARCH = amd64 go build

Observaciones

Combinaciones de objetivos de arquitectura y sistema operativo compatibles (fuente)

$ GOOS $ GOARCH
androide brazo
Darwin 386
Darwin amd64
Darwin brazo
Darwin brazo64
libélula amd64
Freebsd 386
Freebsd amd64
Freebsd brazo
linux 386
linux amd64
linux brazo
linux brazo64
linux ppc64
linux ppc64le
linux mips64
linux mips64le
netbsd 386
netbsd amd64
netbsd brazo
openbsd 386
openbsd amd64
openbsd brazo
plan9 386
plan9 amd64
solaris amd64
ventanas 386
ventanas amd64

Compila todas las arquitecturas usando un Makefile

Este Makefile se cruzará compilando y comprimirá los ejecutables para Windows, Mac y Linux (ARM y 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)

( Tenga cuidado de que Makefile necesite pestañas duras, no espacios )

Recopilación cruzada simple con go build

Desde el directorio de su proyecto, ejecute el comando go build y especifique el sistema operativo y la arquitectura de destino con las variables de entorno GOOS y GOARCH :

Compilación para Mac (64 bits):

GOOS=darwin GOARCH=amd64 go build

Compilación para el procesador de Windows x86:

GOOS=windows GOARCH=386 go build

También es posible que desee establecer el nombre del archivo ejecutable de salida manualmente para realizar un seguimiento de la arquitectura:

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

A partir de la versión 1.7 y en adelante, puede obtener una lista de todas las combinaciones posibles de GOOS y GOARCH con:

go tool dist list

(o para un consumo más fácil de la máquina, go tool dist list -json )

Compilación cruzada utilizando gox

Otra solución conveniente para la compilación cruzada es el uso de gox : https://github.com/mitchellh/gox

Instalación

La instalación se realiza muy fácilmente ejecutando go get github.com/mitchellh/gox . El ejecutable resultante se coloca en el directorio binario de Go, por ejemplo, /golang/bin o ~/golang/bin . Asegúrese de que esta carpeta sea parte de su ruta para poder utilizar el comando gox desde una ubicación arbitraria.

Uso

Desde dentro de la carpeta raíz de un proyecto de Go (donde realiza, por ejemplo, go build ), ejecute gox para crear todos los binarios posibles para cualquier arquitectura (por ejemplo, x86, ARM) y sistema operativo (por ejemplo, Linux, macOS, Windows) que esté disponible.

Para compilar para un determinado sistema operativo, use, por ejemplo, gox -os="linux" lugar. También se podría definir la opción de arquitectura: gox -osarch="linux/amd64" .

Ejemplo simple: compilar helloworld.go para la arquitectura de brazo en una máquina Linux

Preparar helloworld.go (encuentra abajo)

package main

import "fmt"

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

Ejecute GOOS=linux GOARCH=arm go build helloworld.go

Copie el archivo helloworld generado (armar) en su máquina de destino.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow