基本介绍

交叉编译是为了在不同平台编译出其他平台的程序,比如在Linux编译出Windows程序,在Windows能编译出Linux程序,32位系统下编译出64位程序,今天介绍的gox就是其中一款交叉编译工具。

配置环境

首先配置好Go语言的环境变量,并在~/.bash_profile中设置,简单说明一下为什么要添加至该文件,首先以下代码在终端执行完成后只对当前会话有效,关闭终端变量就失效了,而.bash_profile文件在用户每次登录时都会执行一次,把环境变量设置到该文件中,每次登录都会初始化环境变量。当然,放在~/.bashrc中也是可以的,它不仅会在登录时执行,还会在每次打开终端时执行。

export GOPATH=${HOME}/go
export GOROOT=/usr/local/go
export GOBIN=${GOPATH}/bin
export PATH=${PATH}:${GOBIN}

GOROOT与GOPATH要根据自身情况设置,不要盲目跟从,设置完成后若要该文件立即生效,可以执行source命令。

source ~/.bash_profile

如果你的终端装了zsh,可能重新打开终端后依然会失效,那么可以在~/.zshrc文件的最后一行追加上source指令。

source ~/.bash_profile

gox的安装

在终端执行以下指令进行安装。

go get github.com/mitchellh/gox

安装结束后,执行gox -h,如果有展示帮助信息,代表安装成功。

➜  ~ gox -h
Usage: gox [options] [packages]Gox cross-compiles Go applications in parallel.If no specific operating systems or architectures are specified, Goxwill build for all pairs supported by your version of Go.......

gox的使用

按照惯例,我们先祭出hello,world的演示代码。

package mainimport "fmt"func main() {fmt.Print("hello,world")
}

此时进入项目中的工作目录($GOPATH/src/[你的项目名]),直接执行gox命令,会生成多达21个不同平台的可执行文件,横跨linux、windows、freebsd、darwin等系统。

➜  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的架构。

gox -os "windows" -arch amd64

其实它所支持的并不止21款,这些只是默认生成的,下面是gox对各种系统的定义,感兴趣的同学可以自行了解。

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},}...)

除了刚才的命令外还有另一种生成方式,用斜杠的方式将系统与架构合并批量生成。

gox -osarch "windows/amd64 linux/amd64"

赶紧把你生成的程序发给小伙伴执行试试吧,以上就是本文全部内容,感谢阅读。

转载于:https://www.cnblogs.com/enochzzg/p/11020201.html

Go语言交叉编译工具gox相关推荐

  1. go编译so win10_windows搭建Go语言交叉编译环境

    我的环境: 64位 windows 10 go version go1.9.1 windows/amd64 1. 安装MinGW-w64 我的系统是64位win10,早期版本的MinGW我安装后编译g ...

  2. Arm Linux 交叉编译(交叉编译是什么?CROSS_COMPILE)(交叉编译工具链【待更】)

    文章目录 交叉编译 1.编译 2.本地编译 3.交叉编译 交叉编译工具链 交叉编译 在嵌入式系统开发中,经常会听到一个词:交叉编译.到底什么是"交叉编译"呢?为什么要使用" ...

  3. Linux ARM交叉编译工具链制作过程

    一.下载源文件 源代码文件及其版本与下载地址: Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 htt ...

  4. arm hisiv100 linux,hisiv100交叉编译工具链安装

    hisi交叉编译工具链安装 一.         摘要: 交叉编译简单的说,就是A机器上编译生成,运行在B机器上.那么在A机器上的编译工具安装,就是本文所要描述的内容. 工欲善其事必先利其器,所以交叉 ...

  5. 全手工制作arm-linux交叉编译工具链《一》-转

    全手工制作arm-linux交叉编译工具链 (Gcc 4.2.1 + Glibc 2.6.1 + Linux 2.6.22.6)<一> 作者:Garfield Trump 仅仅是本人在学习 ...

  6. 制定交叉编译工具_制作交叉编译工具链的方法总结(详细)

    网上这类文章比较多,但是都不是很具体,刚好有门课结课论文要写这个,所以就总结了一下.以下的过程都是在ubuntu7.10上实际运行过的. 手工制作交叉编译工具 在制作工具开始前先要选好所需要的Binu ...

  7. 浅谈go语言交叉编译

    浅谈go语言交叉编译 基础 cgo cgo设置编译和链接参数 静态库和动态库 静态库 动态库 静态编译 cgo的内部连接和外部连接 internal linking external linking ...

  8. ARM-LINUX-GCC交叉编译工具链必知必会

    一.一些需要知道的概念 在正式谈论交叉编译工具ARM-LINUX-GCC前,我想有必要明确两个非常基本的概念. 1.什么是交叉编译,什么是交叉编译工具链:https://www.crifan.com/ ...

  9. 交叉编译工具的使用说明

    写在前面的话,由于已经学习了JZ2440V3开发板的裸机程序.想检验下学习成果,所以从今天开始把以前学的知识点在tiny4412开发板上面做个检验.裸机部分学习到把uboot移植完成就结束:然后,学习 ...

最新文章

  1. postgreSQL的应用
  2. 编写uwsgi后台启动文件
  3. bootloader学习笔记
  4. 推荐“公主妄想症系列之二:第一次”
  5. ae渲染出现错误是什么问题_[Switch]解决OPENWRT路由,使用UU加速器等出现相同IP,DNS解析错误问题...
  6. ARCHICAD 25 for Mac(cad绘图软件)
  7. comsol5.6下载
  8. 明源售楼系统技术解析—MVC架构
  9. Telemetry系统架构
  10. 赵旭计算机论文,上海交通大学赵旭教授团队在计算机视觉顶级期刊上发表最新研究成果...
  11. elasticsearch 怎么删除过期的数据
  12. window10 20H2安卓模拟器VT检测不到问题解决方法
  13. http工作中常见的状态码
  14. JavaScript 实现web随机数排序、整除、重置
  15. 华中科技大学计算机考博真题,2010年华中科技大学计算机考博试题
  16. 如何轻松代理您的Android设备
  17. 上海交通大学计算机系课程表,上海交通大学电子工程系
  18. MVD(一-Model/View之Repeater)
  19. 网站搭建:从零搭建个人网站教程(4)
  20. 在css样式中隐藏元素,用JS改变的元素CSS样式,css里display :none 隐藏 block 显示

热门文章

  1. Python3——类
  2. get请求可以传body吗_都9102年了,GET和POST的区别掌握了没有?
  3. Python多线程下实现单例模式,以及limit实例模式
  4. 基于JWT的身份认证学习笔记
  5. python网络爬虫系列(六)——数据提取 lxml模块
  6. LeetCode 483. 最小好进制(二分查找)
  7. LeetCode 1678. 设计 Goal 解析器
  8. LeetCode 915. 分割数组
  9. LeetCode 422. 有效的单词方块
  10. hive 创建表_2min快速了解,Hive内部表和外部表