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