繁体   English   中英

交叉编译Go

[英]Cross Compiling Go

我想在我的macbook上交叉编译Go for ubuntu linux x86_64。 我按照这里列出的说明进行操作但是当我运行go-linux-amd64 build我得到以下消息go build runtime: linux/amd64 must be bootstrapped using make.bash 任何帮助都将不胜感激。

你需要做的是重建linux-amd64的库和运行时。 你可以这样做:

  1. 找到你的Go安装的根目录(如果你不知道它在哪里,运行which go可能会有所帮助 - 二进制文件通常与其他源安装)。
  2. cd进入src目录
  3. 运行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包或二进制文件。 您可以按照其他体系结构和操作系统的相同说明进行操作。

编辑(08/13/15):

作为围棋1.5,交叉编译容易得多 由于运行时是用Go编写的,因此无需进行任何设置即可进行交叉编译。 你现在可以从vanilla Go安装运行GOOS=<os> GOARCH=<arch> go build ,它会起作用。

但是,有一个例外。 如果您正在使用cgo,您仍需要提前设置内容。 并且您需要通过将CGO_ENABLED环境变量设置为1来通知工具您要启用cgo交叉编译。 所以,准确地说:

  1. cd进入Go安装的src目录(参见上面的说明)。
  2. 运行CGO_ENABLED=1 GOOS=<os> GOARCH=<arch> ./make.bash --no-clean
  3. 运行CGO_ENABLED=1 go build以构建项目。 即使在编译时,指定CGO_ENABLED=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可能会有所不同)

你必须cd %goroot%/src/,find make.bash

然后执行./make.bash

执行你的命令。 试试吧!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM