Go
Compilación cruzada
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.