Go语言交叉编译工具gox

基本介绍

交叉编译是为了在不同平台编译出其他平台的程序,比如在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

登顶Nature | DeepMind用AI首次实现数学领域重大进展,助力科学家证实两大猜想

来源:AI科技评论作者:杏花、莓酊编辑:琰琰数论是人类知识最古老的一个分支,然而它最深奥的秘密与其最平凡的真理是密切相连的。数学原理极易从事实中归纳出来,但证明却隐藏的极深。可以说数学,是一切科学的…

C++学习——类的多态

文章目录1.重载多态1.1 函数重载1.2 运算符重载2.强制多态3.类型参数化多态4.包含多态类的多态 多态是指同样的消息被不同类型的对象接收时导致不同的行为。 所谓消息是指对类成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。 在C中&a…

细胞如何获得秩序?除了形成细胞器,还可以发生相分离

来源:集智俱乐部作者:Viviane Callier译者:王百臻 审校:梁金 编辑:邓一雪 导语小小的细胞实际上是一个无比复杂的宇宙。DNA在细胞核中运筹帷幄,指导各种细胞器密切合作,产生功能各异的蛋白质。…

JS设置cookie、读取cookie、删除cookie

cookie是网站设计者放置在客户端的小文本文件,一般后台语言使用的比较多,可以实现用户个性化的一些需求。 javascript使用 document.cookie 来操作cookie同一个域名下的页面,共有一个cookie不同的浏览器分别管理自己的cookie,互不影响1.设置cookie // 设…

数据库基础知识——DDL语言

1.库的管理: 一、创建库 create database 库名#创建一个books库 create database books二、删除库 drop database 库名 三、修改库 rename database 旧库名 to 新库名2.表的管理: 2.1 创建表 CREATE TABLE IF NOT EXISTS stuinfo(stuId INT,stuName V…

从人类交互通信发展简史看元宇宙发展趋势及商业价值

来源:科协频道从通信角度来看,人类社会通信方式的发展历程和趋势,它一共经历了以下几个阶段:通信方式的发展历程和趋势第一阶段几千年以前的人类通过口口相传的方式,实现人与人之间的通信,这种通信方式的深…

字符设备驱动

1 引言 APP:open("/dev/xxx"),read,write    ——  设备字符驱动文件包含属性、主设备号和次设备号C LibrarySystem call interface内核:根据文件类型为字符设备,查找字符设备。根据主设备号查找file_…

yii2的Console定时任务创建

https://www.cnblogs.com/dwj97/p/6632848.html 设置定时任务 linux下,运行crontab -e 30 21 * * * /usr/local/php/bin/php /your_project_path/yii test/test //应用程序 上面的例子表示每晚的21:30执行上面的定时程序 下面是定时任务设置的一些基本介绍 基本格…

数据库基础知识——TCL语言

1.TCL含义 TCL,事务控制语言。通过一组逻辑操作单元(一组DML——sql语句),将数据从一种状态切换到另外一种状态,即要么全部成功,要么全部失败。2.特点 (ACID) 原子性(atomicity)&a…

谷歌时间晶体登上Nature,诺奖得主重大猜想成为现实

来源:机器之心没有能量的供给,没有能量的消耗,它的循环运动会永远持续下去。时间晶体就像是一个「永动机」在不同状态之间永久循环往复而不消耗任何能量。来自斯坦福大学、谷歌、马克思 普朗克复杂系统物理研究所和牛津大学的研究团队声称已…

【GoWeb开发实战】Beego的路由控制

Beego的路由控制 二、路由控制 web框架中,路由是重要的一环,对于beego的路由配置如何? 2.1 默认路由 让我们从入口文件main.go先分析起来吧: package mainimport (_ "beegoDemo/routers""github.com/astaxie/beego…

数据库基础知识——视图

视图 含义:理解成一张虚拟的表 视图和表的区别: 使用方式占用物理空间视图完全相同 不占用,仅仅保存的是sql逻辑表完全相同 占用 视图的好处: 1、sql语句提高重用性,效率高 2、和表实现了分离,提高了安…

挑战唯物论?诺奖得主彭罗斯:意识产生可能是大脑内的「量子叠加」的结果...

来源:新智元量子物理学取得了巨大成功,但其解释仍然不确定。大脑由神经元组成,而神经元又由分子组成,很可能会受到量子效应的影响。量子力学和神经科学能否融合成「量子意识」理论?「我们是谁」?恐怕没有什…

完全背包

题目描述 即0-1背包,把每个物品只能拿一次改为能拿无数次。 思路 //这个位置的状态是不拿,第一次拿,和第n>1次拿 dp[i][j]max(max(dp[i-1][j],dp[i-1][j-v[i]]w[i]),dp[i][j-v[i]]); 拿0次:dp[i-1][j]; 拿1次:dp[i-…

下一个是什么?2022年值得关注的22项新兴技术

来源:参考消息网英国《经济学人》网站11月8日发表题为《下一个是什么?2022年值得关注的22项新兴技术》的文章。在文章列举的22项新技术中,既有今年大热的“元宇宙”、太空旅游、脑机接口,也有备受期待的量子计算、艾滋病病毒疫苗……

数据库基础知识——变量

1.系统变量 1.1 全局变量 作用域:针对于所有会话(连接)有效,但不能跨重启 查看所有全局变量 SHOW GLOBAL VARIABLES;查看满足条件的部分系统变量 SHOW GLOBAL VARIABLES LIKE %char%;查看指定的系统变量的值 SELECT global.aut…

防止ARP欺骗

前言: 曾经因为宿舍里面的同学经常熬夜打游戏,好言相劝不管用,无奈之下使用arp欺骗他们的主机,使之晚上11点之后游戏延迟,掉线,最后,一到11点同学们就都上床睡觉了。 防止arp欺骗的三种思路&…

孙文智/胡霁/汪小京团队揭示延迟满足的神经基础

来源:北京脑编辑:绿萝导语:20 世纪 60-70 年代,斯坦福大学心理学家瓦尔特•米舍尔团队进行了一系列有关自制力的心理学实验,其中包括著名的棉花糖实验,得出结论:「能为偏爱的奖励坚持忍耐更长时…

数据库基础知识——存储过程和函数

文章目录1.存储过程1.1 创建存储过程1.2 调用存储过程1.3 删除存储过程1.4 查看存储过程2.函数2.1 创建函数2.2 调用函数2.3 函数的删除和查看2.4 函数和存储过程的区别1.存储过程 含义:一组经过预先编译的sql语句的集合 好处: 1、提高了sql语句的重用…

为什么数学家、统计学家和机器学习专家会用不同方式解决问题?

来源:数学建模andMATLAB原文作者:Nir Kaldero翻译:Fibears原文链接: http://www.galvanize.com/blog/2015/08/26/why-a-mathematician-statistician-machine-learner-solve-the-same-problem-differently-2/#.VeUQMNOqoVU乍一看,机…