【转】golang 交叉编译
问题
golang如何在一个平台编译另外一个平台可以执行的文件。比如在mac上编译Windows和linux可以执行的文件。那么我们的问题就设定成:如何在mac上编译64位linux的可执行文件。
解决方案
golang的交叉编译要保证golang版本在1.5以上,本解决方案实例代码1.9版本执行的。
我们想要编译的文件hello.go
hello.go
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
在mac上编译64位linux的命令编译命令
bash:
GOOS=linux GOARCH=amd64 go build hello.go
上面这段代码直接在命令控制台里面运行就可以生成64位linux的可执行程序。
参数解析
这里用到了两个变量:
- GOOS:目标操作系统
- GOARCH:目标操作系统的架构
| OS | ARCH | OS version |
| linux | 386 / amd64 / arm | >= Linux 2.6 |
| darwin | 386 / amd64 | OS X (Snow Leopard + Lion) |
| freebsd | 386 / amd64 | >= FreeBSD 7 |
| windows | 386 / amd64 | >= Windows 2000 |
编译其他平台的时候根据上面表格参数执行编译就可以了。
扩展阅读
在网络上的诸多教程中可能会看到下面的编译命令
CGO_ENABLED= GOOS=linux GOARCH=amd64 go build hello.go
其中CGO_ENABLED=0的意思是使用C语言版本的GO编译器,参数配置为0的时候就关闭C语言版本的编译器了。自从golang1.5以后go就使用go语言编译器进行编译了。在golang1.9当中没有使用CGO_ENABLED参数发现依然可以正常编译。当然使用了也可以正常编译。比如把CGO_ENABLED参数设置成1,即在编译的过程当中使用CGO编译器,我发现依然是可以正常编译的。
实际上如果在go当中使用了C的库,比如import "C"默认使用go build的时候就会启动CGO编译器,当然我们可以使用CGO_ENABLED=0来控制go build是否使用CGO编译器。
以上若有错误欢迎指正。
【转】golang 交叉编译的更多相关文章
- 【GoLang】golang 交叉编译 实现&工具
apt-get install gcc-mingw-w64 env CGO_ENABLED= GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc g ...
- [转载] Golang交叉编译(跨平台编译)简述
一.何为交叉编译 简单地说,就是在一个平台上生成另一个平台上的可执行代码.同一个体系结构可以运行不同的操作系统:同样,同一个操作系统也可以在不同的体系结构上运行. 二.交叉编译前的准备 本文只介绍Wi ...
- 【备忘录】Golang交叉编译
Golang 支持交叉编译,在一个windows平台可以生成linux或Mac系统下的可执行文件. Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOO ...
- golang 交叉编译 win开发 linux生产
windows平台之下使用 go env 能看到go本身的配置的环境变量,其中红框框起来的变量是交叉编译需要改动的选项, 由于是win平台开发,但是跑起来的程序都是在linux,所以linux转win ...
- Golang 交叉编译
各平台的GOOS和GOARCH参考 OS ARCH OS version linux 386 / amd64 / arm >= Linux 2.6 darwin 386 / amd64 OS X ...
- Golang 交叉编译 window/linux 文件
gox - 一款简单的交叉编译工具 下载地址:https://github.com/mitchellh/gox 使用 go get 命令安装: go get github.com/mitchellh/ ...
- Golang 交叉编译跨平台的可执行程序 (Mac、Linux、Windows )
起因: 在项目中,我们每一次提交都需要添加commit 信息,而且我们的commit 信息,比较繁琐.我决定用golang语言编写一个小工具. 我决定使用语言:golang,使用工具:gox包. go ...
- golang交叉编译:Linux - Windows
环境:Debian jessiego 1.7.4Windows 7 背景: 在debian中写好的程序编译后在windows上运行. 程序中使用了sqlite3 import( _ "git ...
- golang交叉编译笔记
GOOS:目标平台的操作系统(darwin.freebsd.linux.windows) GOARCH:目标平台的体系架构(386.amd64.arm) Mac 下编译 Linux 和 Windows ...
随机推荐
- Zookeeper(二)数据模型
Zookeeper数据模型ZNode 问题 ZK的数据模型ZNodes是什么样的: 树形结构,每个叶子节点都存储着数据,且可挂载子节点: 路径作为叶子节点名称,数据作为叶子节点内的数据: Znode可 ...
- 第十二周Java学习总结
学习总结: 本周主要学习了其他容器和事件处理 1.窗体事件(WindowListener)常用接口方法voidwindowActivated/windowDeactivated(WindowEvent ...
- LeetCode 300. 最长上升子序列(Longest Increasing Subsequence)
题目描述 给出一个无序的整形数组,找到最长上升子序列的长度. 例如, 给出 [10, 9, 2, 5, 3, 7, 101, 18], 最长的上升子序列是 [2, 3, 7, 101],因此它的长度是 ...
- leetcode 33搜索旋转排序数组
暴力解法:O(n) 想办法用二分查找Ologn
- PLSQL导出表的数据insert语句
“Where clause”可以设置查询条件.设置好文件导出的路径(“Output file”),点击[Export]按钮,就可以导出INSERT语句了. 导出之后使用nodepad打开: 但是如果我 ...
- java中常见异常总汇,附解释
Java Exception: 1.Error 2.Runtime Exception 运行时异常3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系统 ...
- 集合(Java总结一)
一.Queue 一个队列就是一个先入先出(FIFO)的数据结构 1.没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue ...
- spingboot之Java邮件发送
注意: 该项目的工具类可以直接应用于项目 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- 常用 tcpdump 抓包方式
目录 文章目录 目录 tcpdump 指令 关键字 常用指令选项 常规操作示例 过滤主机 过滤端口 过滤网络(网段) 过滤协议 复杂的逻辑表达式过滤条件 参考资料 tcpdump 指令 tcpdump ...
- Nginx搭建动态静态服务器
Nginx做静态资源服务器优于Tomcat 区分静态资源,动态资源请求 使用域名区分! 如果是动态资源请求 反向代理到 Tomcat 如果 是静态资源请求 直接走本地Nginx 配置: ###静态 ...