Golang 的跨平台交叉编译浅析

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

什么是跨平台交叉编译

交叉编译

通俗地讲就是在一种平台上编译出其他几个平台能够运行的程序(通常指系统和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 的跨平台交叉编译浅析 交叉编译


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

本文来自:开源中国博客

感谢作者:dingdayu

查看原文:Golang 的跨平台交叉编译浅析

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

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