Поиск…


Вступление

Компилятор Go может создавать двоичные файлы для многих платформ, то есть процессоров и систем. В отличие от большинства других компиляторов, нет особых требований к кросс-компиляции, он так же прост в использовании, как и регулярная компиляция.

Синтаксис

  • GOOS = linux GOARCH = amd64 go build

замечания

Поддерживаемые целевые комбинации операционной системы и архитектуры (источник)

$ GOOS $ GOARCH
андроид рука
Дарвин 386
Дарвин amd64
Дарвин рука
Дарвин arm64
стрекоза amd64
FreeBSD 386
FreeBSD amd64
FreeBSD рука
линукс 386
линукс amd64
линукс рука
линукс arm64
линукс ppc64
линукс ppc64le
линукс MIPS64
линукс mips64le
NetBSD 386
NetBSD amd64
NetBSD рука
OpenBSD 386
OpenBSD amd64
OpenBSD рука
plan9 386
plan9 amd64
Солярис amd64
окна 386
окна amd64

Скомпилируйте все архитектуры с помощью Makefile

Этот Makefile перекрестно скомпилирует и запустит исполняемые файлы для Windows, Mac и Linux (ARM и 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)

(будьте осторожны, чтобы жесткие вкладки Makefile не были пробелами )

Простая кросс-компиляция с go build

В каталоге проекта запустите команду go build и укажите целевую систему операционной системы и архитектуры с переменными среды GOOS и GOARCH :

Компиляция для Mac (64-разрядная версия):

GOOS=darwin GOARCH=amd64 go build

Компиляция для процессора Windows x86:

GOOS=windows GOARCH=386 go build

Вы также можете указать имя исполняемого файла вывода вручную, чтобы отслеживать архитектуру:

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

Начиная с версии 1.7 и далее вы можете получить список всех возможных комбинаций GOOS и GOARCH с:

go tool dist list

(или для более легкого расходования машины, go tool dist list -json )

Кросс-компиляция с помощью gox

Другим удобным решением для кросс-компиляции является использование gox : https://github.com/mitchellh/gox

Монтаж

Установка выполняется очень легко, выполнив go get github.com/mitchellh/gox . Получаемый исполняемый файл помещается в двоичный каталог Go, например /golang/bin или ~/golang/bin . Убедитесь, что эта папка является частью вашего пути, чтобы использовать команду gox из произвольного местоположения.

использование

В корневой папке проекта Go (где вы выполняете, например, выполните go build ), выполните gox , чтобы создать все возможные бинарные файлы для любой архитектуры (например, x86, ARM) и операционной системы (например, Linux, macOS, Windows), которая доступна.

Чтобы создать определенную операционную систему, используйте, например, gox -os="linux" . Также может быть определен параметр архитектуры: gox -osarch="linux/amd64" .

Простой пример: компиляция helloworld.go для архитектуры arm на машине Linux

Подготовьте helloworld.go (найдите ниже)

package main

import "fmt"

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

Запустить GOOS=linux GOARCH=arm go build helloworld.go

Скопируйте сгенерированный helloworld (arm executable) на вашу целевую машину.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow