我正在尝试在我的 MacBook 上为 Ubuntu Linux x86_64 进行 Go 交叉编译。我已经遵循了这里概述的说明,但是当我运行go-linux-amd64 build
时,我收到以下消息:go build runtime: linux/amd64 必须使用 make.bash 进行引导
。感谢任何对此的帮助。
which go
可能会有所帮助 - 二进制文件通常与其余源代码一起安装)。cd
进入src
目录GOOS=linux GOARCH=amd64 ./make.bash --no-clean
(如果make.bash
不可执行,则运行GOOS=linux GOARCH=amd64 bash make.bash --no-clean
)。这将使用指定的操作系统和架构重新构建库和运行时。GOOS=linux GOARCH=amd64 go build
为此架构构建go包或二进制文件。您可以按照相同的说明来操作其他架构和操作系统。GOOS=<os> GOARCH=<arch> go build
即可。CGO_ENABLED
环境变量设置为1
来通知工具链启用cgo交叉编译。因此,要准确无误:
cd
进入Go安装的src
目录(请参阅上面的说明)。CGO_ENABLED=1 GOOS=<os> GOARCH=<arch> ./make.bash --no-clean
CGO_ENABLED=1 go build
来构建你的项目。即使在编译时,你也需要明确指定CGO_ENABLED=1
。根据上面的答案https://dev59.com/LV4c5IYBdhLWcg3w59uQ#27413148,我需要设置GOROOT_BOOTSTRAP
来重新编译我的GO源代码树:
GOROOT_BOOTSTRAP=/usr/lib/golang/ CGO_ENABLED=1 GOOS=linux GOARCH=386 ./make.bash --no-clean
我正在使用 Fedora 23,所以 GOROOT_BOOTSTRAP 在您的操作系统中可能会有所不同。
你必须执行 cd %goroot%/src/
命令,找到 make.bash
然后执行 ./make.bash
执行你的命令。试试看!
make.bash
中添加--no-clean
标志,否则它可能会覆盖你的旧安装(如果发生这种情况,不用担心 - 只需再次运行带有--no-clean
标志的make.bash
即可为您的旧配置重新运行)。 - joshlfgo env GOROOT
(或者仅使用go env
来显示所有信息,但是GOROOT是您想要的)代替which go
。即使您没有设置GOROOT环境变量(建议不要这样做),这也将向您显示go期望找到其工具和文件的位置。 - Dave C