我正在尝试在我的macbook上交叉编译ubuntu linux x86_64的Go。我已经按照here概述的说明进行了操作,但是当我运行go-linux-amd64 build
时,我得到了以下消息go build runtime: linux/amd64 must be bootstrapped using make.bash
。任何在这方面的帮助都将不胜感激。
发布于 2014-12-11 08:03:08
它所说的是您需要为linux-amd64重新构建库和运行时。你可以这样做:
which go
可能会有所帮助-二进制文件通常与sources).cd
的其余部分一起安装到src
目录GOOS=linux GOARCH=amd64 ./make.bash --no-clean
(如果make.bash
不可执行,则为GOOS=linux GOARCH=amd64 bash make.bash --no-clean
)。这将使用指定的OS和architecture.重新构建库和运行时
一旦你做到了这一点,你就可以使用GOOS=linux GOARCH=amd64 go build
为这个架构构建一个go包或二进制文件。对于其他体系结构和操作系统,您可以遵循相同的说明。
编辑(08/13/15):
从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
也很重要。发布于 2016-01-12 15:46:04
在上面的答案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
(我使用的是Fedora23,因此您的操作系统中的GOROOT_BOOTSTRAP可能会有所不同)
发布于 2015-07-01 18:01:26
您必须使用cd %goroot%/src/,find make.bash
然后执行./make.bash
执行您的命令。试试看!
https://stackoverflow.com/questions/27412601
复制相似问题