Golang 的跨平台交叉编译浅析

什么是跨平台交叉编译

交叉编译

通俗地讲就是在一种平台上编译出其他几个平台能够运行的程序(通常指系统和CPU架构的不同)

交叉编译通常使用在分发时,编译出多个平台可用的二进制程序,比如在Linux下编译出可以在Win下可以使用的EXE程序。

本地编译

本地编译是指当前系统所配置编译器根据当前系统配置编译出在当前系统所适用的执行程序(部分其他语言本地编译时可能会由于扩展包含的问题,无法在同平台其他机器运行)。

所以如果要生成在非本机的其他平台和系统的程序,就需要用到交叉编译(交叉编译工具链)。

交叉编译工具链

交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc 3个部分组成。

有时出于减小 libc 库大小的考虑,也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。

Golang 的跨平台交叉编译

Go语言是编译型语言,可以将程序编译后在将其拿到其它操作系统中运行,此过程只需要在编译时增加对其它系统的支持。

交叉编译依赖下面几个环境变量

  • GOARCH 目标平台(编译后的目标平台)的处理器架构(386、amd64、arm)
  • GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows)

各平台的GOOS和GOARCH支持情况

GOOSGOARCHOS version
linux386 / amd64 / arm>= Linux 2.6
darwin386 / amd64OS X (Snow Leopard + Lion)
freebsd386 / amd64>= FreeBSD 7
windows386 / amd64>= Windows 2000

Golang交叉编译步骤(可跳过)

首先进入$GOROOT/go/src 源码所在目录,执行如下命令创建目标平台所需的包和工具文件

# 如果你想在Windows 32位系统下运行
cd $GOROOT/src
CGO_ENABLED=0 GOOS=windows GOARCH=386 ./make.bash
# 如果你想在Windows 64位系统下运行
cd $GOROOT/src
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash

# 如果你想在Linux 32位系统下运行
cd $GOROOT/src
CGO_ENABLED=0 GOOS=linux GOARCH=386 ./make.bash
# 如果你想在Linux 64位系统下运行
cd $GOROOT/src
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash

交叉编译当前项目

# 如果你想在Windows 32位系统下运行
CGO_ENABLED=0 GOOS=windows GOARCH=386 go build test.go
# 如果你想在Windows 64位系统下运行
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go

# 如果你想在Linux 32位系统下运行
CGO_ENABLED=0 GOOS=linux GOARCH=386 go build test.go
# 如果你想在Linux 64位系统下运行
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go

上面命令中的 CGO_ENABLED = 0 表示设置CGO工具不可用; GOOS 表示程序构建环境的目标操作系统(Linux、Windows); GOARCH 表示程序构建环境的目标计算架构(32位、64位);

现在你可以在相关目标操作系统上运行编译后的程序了。

链接

关于于 Go 的跨平台交叉编译浅析 交叉编译

转载于:https://my.oschina.net/dingdayu/blog/1583815

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值