适用于Windows 7(32位)中所有平台的Golang编译

时间:2014-07-31 05:47:12

标签: windows go cross-platform cross-compiling

我正在使用Windows 7 [32位]操作系统。

我正在构建示例go program。

我想从我的Windows 7 [32位]操作系统中为所有平台编译此程序。

我想为所有Linux [32/64] / Mac OSX [32/64] / Windows[32/64]编译我的程序。

是否有可能不是来自我的单一操作系统?

2 个答案:

答案 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指出belowissue 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         |
   ----------------------------------------------------------