如何从 Windows 交叉编译到 Linux?

新手上路,请多包涵

我在 Windows 机器上安装了 Go 1.2,编写了一个虚拟程序并将环境变量 GOARCHGOOS 分别设置为“AMD64”和“linux”。

当我发出“ go build ”命令时,我收到一个错误:

 go build runtime: linux/amd64 must be bootstrapped using make.bat

这是什么意思?

原文由 Dante 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 741
2 个回答

它告诉您需要先构建所有工具,然后才能使用它们。

如果你的 windows GOARCH 是 amd64,那么你可以通过运行这个小批量程序来“构建”所有需要的工具:

 set GOARCH=amd64
set GOOS=linux
go tool dist install -v pkg/runtime
go install -v -a std

如果成功,那么您应该能够执行您所描述的操作(只需使用 amd64,而不是 AMD64 - 它区分大小写)。

如果你的 windows GOARCH 是 386,那么你需要先构建你的 386 工具。您需要为此下载 mingw gcc。照 user2714852 说的做。

这里 https://golang.org/wiki/WindowsCrossCompiling 是针对 linux 的类似说明,也许您会发现它们有帮助。

亚历克斯

原文由 alex 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在从 windows 构建 linux 时遇到了一些主要问题,在一天结束时,它相当简单。我会评论 Alex 的帖子,但我不能,因为我是一个 stackoverflow 新手。

正如亚历克斯所说,设置 环境变量。这 必须以管理员身份完成(例如,右键单击“命令提示符”或“Powershell”快捷方式,然后单击“以管理员身份运行”)

 set GOARCH=amd64
set GOOS=linux

如果您使用 Powershell,请使用

$Env:GOOS = "linux"; $Env:GOARCH = "amd64"

如果您不以管理员身份执行此操作,变量将不会生效,您将只是为您当前所在的操作系统和体系结构构建它。

我发现通过运行 go env 来检查你的 go 环境变量总是好的,它给你当前的 go 环境变量列表

go env
set GOARCH=amd64
set GOBIN=
set GOEXE=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=linux
set GOPATH=T:\Projects\gopath
set GORACE=
set GOROOT=C:\Go
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set GOGCCFLAGS=-fPIC -m64 -fmessage-length=0
set CXX=g++
set CGO_ENABLED=0
set PKG_CONFIG=pkg-config
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2

确保将 GOOS 和 GOARCH 设置为您之前指定的值。

如果一切顺利,您应该能够导航到包含您的 go 代码的目录,并从命令行运行:

 go build

这将为系统和环境变量中设置的体系结构构建包。

一旦我终于弄明白了,我遇到了其他一些问题,但那是与这个问题无关的另一件事。

原文由 David O 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题