Я пытаюсь перекрестно скомпилировать 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
выполните команду. Попробуйте!