Инструмент кросс-компиляции языка Go gox

Go

основное введение

Кросс-компиляция — это компиляция программ для других платформ на разных платформах, например, компиляция программ Windows в Linux, компиляция программ Linux в Windows и компиляция 64-битных программ в 32-битных системах.Представленный сегодня Gox — один из таких инструментов.

Среда конфигурации

Сначала настройте переменные среды языка Go и~/.bash_profileВ настройках кратко объясните, почему вы хотите добавить его в этот файл.Во-первых, следующий код действителен только для текущей сессии после выполнения терминала, и закрытие переменной терминала будет недействительным, и.bash_profileФайл будет выполняться один раз каждый раз, когда пользователь входит в систему, и переменные среды устанавливаются в файл, а переменные среды будут инициализироваться каждый раз, когда они входят в систему. Конечно, поставить~/.bashrcтакже возможен в , он будет выполняться не только при входе в систему, но и при каждом открытии терминала.

export GOPATH=${HOME}/go
export GOROOT=/usr/local/go
export GOBIN=${GOPATH}/bin
export PATH=${PATH}:${GOBIN}

GOROOT и GOPATH должны быть установлены в соответствии с вашей собственной ситуацией, не следуйте слепо.После завершения настройки, если вы хотите, чтобы файл вступил в силу немедленно, вы можете выполнитьsourceЗаказ.

source ~/.bash_profile

Если ваш терминал имеетzsh, после повторного открытия терминала все еще может произойти сбой, тогда вы можете~/.zshrcДобавить последнюю строку файлаsourceинструкция.

source ~/.bash_profile

установка гокс

Выполните следующую команду в терминале для установки.

go get github.com/mitchellh/gox

После завершения установки выполнитеgox -h, если отображается справочная информация, это означает, что установка прошла успешно.

➜  ~ gox -h
Usage: gox [options] [packages]

  Gox cross-compiles Go applications in parallel.

  If no specific operating systems or architectures are specified, Gox
  will build for all pairs supported by your version of Go.
  ......

Использование гокса

Как обычно, мы сначала предлагаемhello,worldдемо-код.

package main

import "fmt"

func main() {
	fmt.Print("hello,world")
}

На этом этапе введите рабочий каталог в проекте ($GOPATH/src/[имя вашего проекта]) и выполните его напрямую.goxКоманда создаст исполняемые файлы для 21 различных платформ, включая Linux, Windows, FreeBSD, Darwin и другие системы.

➜  hello gox
Number of parallel builds: 3

-->     linux/amd64: hello
-->   openbsd/amd64: hello
-->      darwin/386: hello
-->    linux/mipsle: hello
-->     windows/386: hello
-->   windows/amd64: hello
-->    darwin/amd64: hello
-->       linux/386: hello
-->     linux/s390x: hello
-->      netbsd/386: hello
-->       linux/arm: hello
-->     freebsd/386: hello
-->    netbsd/amd64: hello
-->     freebsd/arm: hello
-->   freebsd/amd64: hello
-->     openbsd/386: hello
-->    linux/mips64: hello
-->      linux/mips: hello
-->  linux/mips64le: hello
-->      netbsd/arm: hello

Но я не хочу генерировать программы для всех платформ сразу, тогда мне нужно указать параметры gox, как показано ниже,osПараметр указывает имя системы для создания,archОпределяет архитектуру ЦП.

gox -os "windows" -arch amd64

На самом деле он поддерживает более 21 модели.Они генерируются только по умолчанию.Ниже приводится определение Gox для различных систем.Заинтересованные студенты могут понять сами.

Platforms_1_0 = []Platform{
		{"darwin", "386", true},
		{"darwin", "amd64", true},
		{"linux", "386", true},
		{"linux", "amd64", true},
		{"linux", "arm", true},
		{"freebsd", "386", true},
		{"freebsd", "amd64", true},
		{"openbsd", "386", true},
		{"openbsd", "amd64", true},
		{"windows", "386", true},
		{"windows", "amd64", true},
	}

	Platforms_1_1 = append(Platforms_1_0, []Platform{
		{"freebsd", "arm", true},
		{"netbsd", "386", true},
		{"netbsd", "amd64", true},
		{"netbsd", "arm", true},
		{"plan9", "386", false},
	}...)

	Platforms_1_3 = append(Platforms_1_1, []Platform{
		{"dragonfly", "386", false},
		{"dragonfly", "amd64", false},
		{"nacl", "amd64", false},
		{"nacl", "amd64p32", false},
		{"nacl", "arm", false},
		{"solaris", "amd64", false},
	}...)

	Platforms_1_4 = append(Platforms_1_3, []Platform{
		{"android", "arm", false},
		{"plan9", "amd64", false},
	}...)

	Platforms_1_5 = append(Platforms_1_4, []Platform{
		{"darwin", "arm", false},
		{"darwin", "arm64", false},
		{"linux", "arm64", false},
		{"linux", "ppc64", false},
		{"linux", "ppc64le", false},
	}...)

	Platforms_1_6 = append(Platforms_1_5, []Platform{
		{"android", "386", false},
		{"linux", "mips64", false},
		{"linux", "mips64le", false},
	}...)

	Platforms_1_7 = append(Platforms_1_5, []Platform{
		// While not fully supported s390x is generally useful
		{"linux", "s390x", true},
		{"plan9", "arm", false},
		// Add the 1.6 Platforms, but reflect full support for mips64 and mips64le
		{"android", "386", false},
		{"linux", "mips64", true},
		{"linux", "mips64le", true},
	}...)

	Platforms_1_8 = append(Platforms_1_7, []Platform{
		{"linux", "mips", true},
		{"linux", "mipsle", true},
	}...)

В дополнение к команде только что есть еще один метод генерации, который объединяет систему и архитектуру с косой чертой и генерирует их в пакетах.

gox -osarch "windows/amd64 linux/amd64"

Поторопитесь и отправьте сгенерированную программу своим друзьям, чтобы они попробовали ее.Выше приведено все содержание этой статьи, спасибо за прочтение.