首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >交叉编译Go

交叉编译Go
EN

Stack Overflow用户
提问于 2014-12-11 07:12:52
回答 3查看 8.2K关注 0票数 11

我正在尝试在我的macbook上交叉编译ubuntu linux x86_64的Go。我已经按照here概述的说明进行了操作,但是当我运行go-linux-amd64 build时,我得到了以下消息go build runtime: linux/amd64 must be bootstrapped using make.bash。任何在这方面的帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2014-12-11 08:03:08

它所说的是您需要为linux-amd64重新构建库和运行时。你可以这样做:

  1. 找到Go安装的根目录(如果您不知道它在哪里,运行which go可能会有所帮助-二进制文件通常与sources).
  2. cd的其余部分一起安装到src目录
  3. Run 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交叉编译。所以,准确地说:

使用

  1. cd进入Go安装的src目录(参见上面的说明)。运行CGO_ENABLED=1 GOOS=<os> GOARCH=<arch> ./make.bash --no-clean
  2. Run CGO_ENABLED=1 go build来构建您的项目。即使在编译时指定CGO_ENABLED=1也很重要。
票数 29
EN

Stack Overflow用户

发布于 2016-01-12 15:46:04

在上面的答案https://stackoverflow.com/a/27413148/3675575之后,我需要设置GOROOT_BOOTSTRAP来重新编译我的GO源代码树:

代码语言:javascript
运行
复制
GOROOT_BOOTSTRAP=/usr/lib/golang/ CGO_ENABLED=1 GOOS=linux GOARCH=386 ./make.bash --no-clean

(我使用的是Fedora23,因此您的操作系统中的GOROOT_BOOTSTRAP可能会有所不同)

票数 1
EN

Stack Overflow用户

发布于 2015-07-01 18:01:26

您必须使用cd %goroot%/src/,find make.bash

然后执行./make.bash

执行您的命令。试试看!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27412601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档