我正在尝试在我的macbook上交叉编译Go for ubuntu linux x86_64。我遵循了here概述的说明,但当我运行go-linux-amd64 build
时,我收到以下消息go build runtime: linux/amd64 must be bootstrapped using make.bash
。任何有关这方面的帮助将不胜感激。
答案 0 :(得分:29)
它说你需要做的是重建linux-amd64的库和运行时。你可以这样做:
which go
可能会有所帮助 - 二进制文件经常与其他来源一起安装)。cd
进入src
目录GOOS=linux GOARCH=amd64 ./make.bash --no-clean
不可执行,请运行GOOS=linux GOARCH=amd64 bash make.bash --no-clean
(或make.bash
。这将使用指定的操作系统和体系结构重建库和运行时。完成此操作后,您可以使用GOOS=linux GOARCH=amd64 go build
为此体系结构构建go包或二进制文件。您可以按照其他体系结构和操作系统的相同说明进行操作。
从Go 1.5开始,交叉编译很多更容易。由于运行时是用Go编写的,因此无需进行任何设置即可进行交叉编译。您现在可以从vanilla Go安装中运行GOOS=<os> GOARCH=<arch> go build
,它将起作用。
但是,有一个例外。如果您正在使用cgo,您仍需要提前设置内容。并且您需要通过将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
。答案 1 :(得分:1)
按照上面的回答https://stackoverflow.com/a/27413148/3675575,我需要设置GOROOT_BOOTSTRAP
来重新编译我的GO源代码树:
GOROOT_BOOTSTRAP=/usr/lib/golang/ CGO_ENABLED=1 GOOS=linux GOARCH=386 ./make.bash --no-clean
(我正在使用Fedora 23,因此GOROOT_BOOTSTRAP在您的操作系统中可能会有所不同)
答案 2 :(得分:-1)
您必须cd %goroot%/src/,find make.bash
然后执行./make.bash
执行你的命令。试试吧!