Go跨平台编译

栏目: Go · 发布时间: 5年前

内容简介:golang中跨平台交叉编译涉及两个重要的环境变量:如果想要跨平台编译go程序,只需在build的时候制定目标主机的os和arch,如下例子所示所示其中二者可以设置如下参数:

golang中跨平台交叉编译涉及两个重要的环境变量: GOOSGOARCH ,分别代表 Target Host OSTarget Host ARCH . 如果没有显式设置这些环境变量,我们通过go env可以看到 go 编译器眼中这两个环境变量的当前值

GOARCH="amd64" // 程序构建环境的目标计算架构
GOBIN="/data/server/go/bin" // 存放可执行文件的目录的绝对路径
GOEXE="" // 可执行文件的后缀
GOHOSTARCH="amd64" // 程序运行环境的目标计算架构
GOHOSTOS="linux" // 程序运行环境的目标操作系统
GOOS="linux" // 程序构建环境的目标操作系统
GOPATH="/data/code" // 工作区目录的绝对路径
GORACE="" // 用于数据竞争检测的相关选项
GOROOT="/data/server/go" // Go语言的安装目录的绝对路径
GOTOOLDIR="/data/server/go/pkg/tool/linux_amd64" // Go工具目录的绝对路径
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build410649157=/tmp/go-build"
CXX="g++"
CGO_ENABLED="1" // 指明cgo工具是否可用的标识
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
// linux 环境变量设置 /etc/profile
export GOROOT=/data/server/go
export GOPKG=$GOROOT/pkg/tool/linux_amd64 
export GOARCH=amd64
export GOOS=linux
export GOPATH=/data/code
export GOBIN=$GOROOT/bin:$GOPATH/bin
export PATH=$PATH:$GOBIN:$GOPKG:$GOPATH/bin

如果想要跨平台编译go程序,只需在build的时候制定目标主机的os和arch,如下例子所示所示

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go // win x64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o main main.go // win x64

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go // linux x64
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main main.go // linux x64

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go // mac x64
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o main main.go // mac x64

其中二者可以设置如下参数:

$GOOS         $GOARCH     
darwin         386
darwin         amd64
freebsd     386
freebsd     amd64
linux         386
linux         amd64
linux         arm     incomplete
windows     386     incomplete

如果想要编译其他平台的可执行脚本,秩序指定相应的os和arch即可。

go build命令的常用标记说明

-a        强行对所有涉及到的代码包(包含标准库中的代码包)进行重新构建,即使它们已经是最新的了。
-n        打印编译期间所用到的其它命令,但是并不真正执行它们。
-p n    指定编译过程中执行各任务的并行数量(确切地说应该是并发数量)。在默认情况下,该数量等于CPU的逻辑核数。但是在darwin/arm平台(即iPhone和iPad所用的平台)下,该数量默认是1。
-race    开启竞态条件的检测。不过此标记目前仅在linux/amd64、freebsd/amd64、darwin/amd64和windows/amd64平台下受到支持。
-v        打印出那些被编译的代码包的名字。
-work    打印出编译时生成的临时工作目录的路径,并在编译结束时保留它。在默认情况下,编译结束时会删除该目录。
-x        打印编译期间所用到的其它命令。注意它与-n标记的区别。

ps: http://wiki.jikexueyuan.com/p...


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高效算法

高效算法

[法] Christoph Dürr、[法] Jill-Jênn Vie / 史世强 / 人民邮电出版社 / 2018-5 / 55.00元

本书旨在探讨如何优化算法效率,详细阐述了经典算法和特殊算法的实现、应用技巧和复杂度验证过程,内容由浅入深,能帮助读者快速掌握复杂度适当、正确率高的高效编程方法以及自检、自测技巧,是参加ACM/ICPC、Google Code Jam 等国际编程竞赛、备战编程考试、提高编程效率、优化编程方法的参考书目。一起来看看 《高效算法》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码