Кросс-компиляция Go

Я пытаюсь перекрестно скомпилировать Go для ubuntu linux x86_64 на моем macbook. Я следую инструкциям здесь, но когда я запускаю go-linux-amd64 build, я получаю следующее сообщение go build runtime: linux/amd64 must be bootstrapped using make.bash. Любая помощь с этим будет оценена.

Ответ 1

Что вам нужно сделать, это перестроить библиотеку и среду выполнения для linux-amd64. Вы можете сделать это следующим образом:

  • Найдите корень вашей установки Go (если вы не знаете, где это, работает which go может помочь - двоичный файл часто устанавливается вместе с остальными источниками).
  • cd в каталог src
  • Запустите GOOS=linux GOARCH=amd64 ./make.bash --no-clean (или GOOS=linux GOARCH=amd64 bash make.bash --no-clean, если make.bash не является исполняемым). Это приведет к восстановлению библиотеки и времени выполнения с использованием указанной ОС и архитектуры.

Как только вы это сделаете, вы можете создать пакет go или binary для этой архитектуры, используя GOOS=linux GOARCH=amd64 go build. Вы можете следовать тем же инструкциям для других архитектур и операционных систем.

Изменить (08/13/15):

Как и в случае Go 1.5, кросс-компиляция намного проще. Поскольку время выполнения написано в Go, нет необходимости устанавливать что-либо, чтобы иметь возможность перекрестно скомпилировать. Теперь вы можете просто запустить GOOS=<os> GOARCH=<arch> go build из установки Vanilla Go, и она будет работать.

Однако есть одно исключение. Если вы используете cgo, вам все равно нужно заранее установить материал. И вам нужно будет сообщить инструменту, что вы хотите включить кросс-компиляцию cgo, установив переменную среды CGO_ENABLED в 1. Итак, если быть точным:

  • cd в каталог src вашей установки Go (см. инструкции выше).
  • Запустить CGO_ENABLED=1 GOOS=<os> GOARCH=<arch> ./make.bash --no-clean
  • Запустите CGO_ENABLED=1 go build, чтобы создать проект. Важно, чтобы вы указывали CGO_ENABLED=1 даже при компиляции.

Ответ 2

Следуя приведенному выше ответу fooobar.com/questions/496626/..., мне нужно было установить GOROOT_BOOTSTRAP для перекомпиляции моего исходного кода GO:

GOROOT_BOOTSTRAP=/usr/lib/golang/ CGO_ENABLED=1 GOOS=linux GOARCH=386 ./make.bash --no-clean

(я использую Fedora 23, поэтому GOROOT_BOOTSTRAP может отличаться в вашей операционной системе)

Ответ 3

Вы должны cd %goroot%/src/,find make.bash

Затем выполните ./make.bash

выполните команду. Попробуйте!