Linux 交叉编译Go
我正试图在我的macbook上为ubuntu linux x86_64交叉编译Go。我已经按照概述的说明进行了操作,但是当我运行Linux 交叉编译Go,linux,macos,ubuntu,go,cross-compiling,Linux,Macos,Ubuntu,Go,Cross Compiling,我正试图在我的macbook上为ubuntu linux x86_64交叉编译Go。我已经按照概述的说明进行了操作,但是当我运行go-linux-amd64 build时,我得到以下消息go build runtime:linux/amd64必须使用make.bash进行引导。对此的任何帮助都将不胜感激。它说您需要做的是为linux-amd64重建库和运行时。您可以这样做: 找到Go安装的根目录(如果不知道它在哪里,运行哪个Go可能会有所帮助-二进制文件通常与其他源代码一起安装) cd进入src
go-linux-amd64 build
时,我得到以下消息go build runtime:linux/amd64必须使用make.bash进行引导。对此的任何帮助都将不胜感激。它说您需要做的是为linux-amd64重建库和运行时。您可以这样做:
找到Go安装的根目录(如果不知道它在哪里,运行哪个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包或二进制文件。对于其他体系结构和操作系统,您可以遵循相同的说明
编辑(2015年8月13日):
从Go 1.5开始,交叉编译要容易得多。因为运行时是用Go编写的,所以不需要设置任何东西就可以进行交叉编译。现在,您可以从一个普通的go安装运行GOOS=GOARCH=go build
,它就可以工作了
然而,有一个例外。如果您使用的是cgo,您仍然需要提前设置内容。您需要通过将cgo\u ENABLED
环境变量设置为1
来通知工具您想要启用cgo交叉编译。因此,准确地说:
cd
进入Go安装的src
目录(请参阅上面的说明)
运行CGO\u ENABLED=1 GOOS=GOARCH=./make.bash--no clean
运行CGO\u ENABLED=1 go build
来构建您的项目。即使在编译时,也必须指定CGO_ENABLED=1
您必须cd%goroot%/src/,找到make.bash
然后执行/make.bash
执行你的命令。试试看 按照上面的答案,我需要设置GOROOT\u BOOTSTRAP
来重新编译我的GO源代码树:
GOROOT_BOOTSTRAP=/usr/lib/golang/ CGO_ENABLED=1 GOOS=linux GOARCH=386 ./make.bash --no-clean
(我使用的是Fedora 23,因此GOROOT_引导程序在您的操作系统中可能会有所不同)哦,我忘了!您还必须将--no clean
标志添加到make.bash
中,否则它可能会覆盖您的旧安装(如果发生这种情况,无需担心,只需重新运行make.bash
,这一次使用--no clean
标志即可),而不是使用这一标志,我建议go-env-GOROOT
(或者只是go-env
来显示所有内容,但是GOROOT是您想要的)。即使您没有设置GOROOT环境变量(建议您不要设置),这也会告诉您go希望在哪里找到它的工具和东西。