我正在使用Windows 7 [32位]操作系统。
我正在构建示例go program。
我想从我的Windows 7 [32位]操作系统中为所有平台编译此程序。
我想为所有Linux [32/64] / Mac OSX [32/64] / Windows[32/64]
编译我的程序。
是否有可能不是来自我的单一操作系统?
答案 0 :(得分:11)
更新Go 1.5:查看" Cross compilation just got a whole lot better in Go 1.5"
要成功进行交叉编译,您需要
- 目标平台的编译器,如果它们与您的主机平台不同,即您使用的是darwin / amd64(6g)并且您想为linux / arm(5g)编译。
- 目标平台的标准库,其中包含在构建Go分发时生成的一些文件。
计划在1.5版本中翻译Go compiler into Go即将实现,第一个问题现已解决。
package main
import "fmt"
import "runtime"
func main() {
fmt.Printf("Hello %s/%s\n", runtime.GOOS, runtime.GOARCH)
}
为darwin / 386构建
% env GOOS=darwin GOARCH=386 go build hello.go
# scp to darwin host
$ ./hello
Hello darwin/386
或者为linux / arm构建
% env GOOS=linux GOARCH=arm GOARM=7 go build hello.go
# scp to linux host
$ ./hello
Hello linux/arm
原始答案(Go 1.4及之前)
您可以尝试使用gox
Gox是一个简单,简洁的Go交叉编译工具,其行为与标准版本很相似。
Gox将为多个平台并行构建 Gox还将为您构建交叉编译工具链。在使用Gox之前,必须构建交叉编译工具链。 Gox可以为您做到这一点。这只需要做一次(或者每当你更新Go时):
$ gox -build-toolchain
您还可以在" Developing for Multiple Platforms With Go"找到许多跨平台的开发技巧。
Passionate Developer指出below至issue 19,由OP Nakka Chandra留下,即使issue 10报告在Windows上成功运行gox。
答案 1 :(得分:0)
在Windows上,运行以下命令:
C:\Users\user\go\src\myapp> set GOOS=linux
C:\Users\user\go\src\myapp> set GOARCH=amd64
C:\Users\user\go\src\myapp> go build
对我有用。
请注意,如果出现错误:
cmd / go:不支持的GOOS / GOARCH对linux / amd64
这是因为变量末尾有空格。
例如,错误的用法是:set GOOS=linux<space>)
,而应该是:set GOOS=linux
。
这是所有其他系统的完整表列表(取自here):
GOOS - Target Operating System| GOARCH - Target Platform
-------------------------------|--------------------------
| android | arm |
| darwin | 386 |
| darwin | amd64 |
| darwin | arm |
| darwin | arm64 |
| dragonfly | amd64 |
| freebsd | 386 |
| freebsd | amd64 |
| freebsd | arm |
| linux | 386 |
| linux | amd64 |
| linux | arm |
| linux | arm64 |
| linux | ppc64 |
| linux | ppc64le |
| linux | mips |
| linux | mipsle |
| linux | mips64 |
| linux | mips64le |
| netbsd | 386 |
| netbsd | amd64 |
| netbsd | arm |
| openbsd | 386 |
| openbsd | amd64 |
| openbsd | arm |
| plan9 | 386 |
| plan9 | amd64 |
| solaris | amd64 |
| windows | 386 |
| windows | amd64 |
----------------------------------------------------------