Go语言交叉编译工具gox

EnochZg · · 478 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

## 基本介绍 交叉编译是为了在不同平台编译出其他平台的程序,比如在Linux编译出Windows程序,在Windows能编译出Linux程序,32位系统下编译出64位程序,今天介绍的gox就是其中一款交叉编译工具。 ## 配置环境 首先配置好Go语言的环境变量,并在`~/.bash_profile`中设置,简单说明一下为什么要添加至该文件,首先以下代码在终端执行完成后只对当前会话有效,关闭终端变量就失效了,而`.bash_profile`文件在用户每次登录时都会执行一次,把环境变量设置到该文件中,每次登录都会初始化环境变量。当然,放在`~/.bashrc`中也是可以的,它不仅会在登录时执行,还会在每次打开终端时执行。 ```bash export GOPATH=${HOME}/go export GOROOT=/usr/local/go export GOBIN=${GOPATH}/bin export PATH=${PATH}:${GOBIN} ``` GOROOT与GOPATH要根据自身情况设置,不要盲目跟从,设置完成后若要该文件立即生效,可以执行`source`命令。 ```bash source ~/.bash_profile ``` 如果你的终端装了`zsh`,可能重新打开终端后依然会失效,那么可以在`~/.zshrc`文件的最后一行追加上`source`指令。 ```bash source ~/.bash_profile ``` ## gox的安装 在终端执行以下指令进行安装。 ```bash go get github.com/mitchellh/gox ``` 安装结束后,执行`gox -h`,如果有展示帮助信息,代表安装成功。 ```bash ➜ ~ gox -h Usage: gox [options] [packages] Gox cross-compiles Go applications in parallel. If no specific operating systems or architectures are specified, Gox will build for all pairs supported by your version of Go. ...... ``` ## gox的使用 按照惯例,我们先祭出`hello,world`的演示代码。 ```go package main import "fmt" func main() { fmt.Print("hello,world") } ``` 此时进入项目中的工作目录($GOPATH/src/[你的项目名]),直接执行`gox`命令,会生成多达21个不同平台的可执行文件,横跨linux、windows、freebsd、darwin等系统。 ```bash ➜ hello gox Number of parallel builds: 3 --> linux/amd64: hello --> openbsd/amd64: hello --> darwin/386: hello --> linux/mipsle: hello --> windows/386: hello --> windows/amd64: hello --> darwin/amd64: hello --> linux/386: hello --> linux/s390x: hello --> netbsd/386: hello --> linux/arm: hello --> freebsd/386: hello --> netbsd/amd64: hello --> freebsd/arm: hello --> freebsd/amd64: hello --> openbsd/386: hello --> linux/mips64: hello --> linux/mips: hello --> linux/mips64le: hello --> netbsd/arm: hello ``` 但我并不想一次生成所有平台的程序,这时就需要gox的参数进行指定,如下所示,`os`参数指定要生成的系统名称,`arch`指定CPU的架构。 ```bash gox -os "windows" -arch amd64 ``` 其实它所支持的并不止21款,这些只是默认生成的,下面是gox对各种系统的定义,感兴趣的同学可以自行了解。 ```go Platforms_1_0 = []Platform{ {"darwin", "386", true}, {"darwin", "amd64", true}, {"linux", "386", true}, {"linux", "amd64", true}, {"linux", "arm", true}, {"freebsd", "386", true}, {"freebsd", "amd64", true}, {"openbsd", "386", true}, {"openbsd", "amd64", true}, {"windows", "386", true}, {"windows", "amd64", true}, } Platforms_1_1 = append(Platforms_1_0, []Platform{ {"freebsd", "arm", true}, {"netbsd", "386", true}, {"netbsd", "amd64", true}, {"netbsd", "arm", true}, {"plan9", "386", false}, }...) Platforms_1_3 = append(Platforms_1_1, []Platform{ {"dragonfly", "386", false}, {"dragonfly", "amd64", false}, {"nacl", "amd64", false}, {"nacl", "amd64p32", false}, {"nacl", "arm", false}, {"solaris", "amd64", false}, }...) Platforms_1_4 = append(Platforms_1_3, []Platform{ {"android", "arm", false}, {"plan9", "amd64", false}, }...) Platforms_1_5 = append(Platforms_1_4, []Platform{ {"darwin", "arm", false}, {"darwin", "arm64", false}, {"linux", "arm64", false}, {"linux", "ppc64", false}, {"linux", "ppc64le", false}, }...) Platforms_1_6 = append(Platforms_1_5, []Platform{ {"android", "386", false}, {"linux", "mips64", false}, {"linux", "mips64le", false}, }...) Platforms_1_7 = append(Platforms_1_5, []Platform{ // While not fully supported s390x is generally useful {"linux", "s390x", true}, {"plan9", "arm", false}, // Add the 1.6 Platforms, but reflect full support for mips64 and mips64le {"android", "386", false}, {"linux", "mips64", true}, {"linux", "mips64le", true}, }...) Platforms_1_8 = append(Platforms_1_7, []Platform{ {"linux", "mips", true}, {"linux", "mipsle", true}, }...) ``` 除了刚才的命令外还有另一种生成方式,用斜杠的方式将系统与架构合并批量生成。 ```bash gox -osarch "windows/amd64 linux/amd64" ``` 赶紧把你生成的程序发给小伙伴执行试试吧,以上就是本文全部内容,感谢阅读。

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

478 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传