标签:
从第一天开始学习Golang就知道它有一个很让人心动的特性就是跨平台编译,但一直没有去使用。最近做了一个小东西需要用到这个特性,所以在网上进行了搜索。
首先找到是国内文章是利用下载Go的源码包,将对其进行编译安装,完成后Go/src下的make.bash生成跨平台的编译器,这样在每次用时需要指定GOOS及GOARCH来进行编译,如:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build //编译为linux 64位系统下的程序
如果需要编译windows 64 位下的程序则要再写一个命令:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build //编译为windows 64位系统下的程序
具体介绍请看: “Golang的跨平台编译程序”
这种方法针对一次性编译、测试、学习很有用,但对于需要对多平台编译一次性处理会有一些麻烦
好吧,除了第一个有点像是一个麻烦,其它的都不是问题,主要目的是引出第二种方法,那就是利用docker进行部署编译:
sudo docker pull golang:1.4.2cross
GOARCH="amd64" GOBIN="" GOCHAR="6" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/go" GORACE="" GOROOT="/usr/src/go" GOTOOLDIR="/usr/src/go/pkg/tool/linux_amd64" CC="gcc" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0" CXX="g++" CGO_ENABLED="1"
root@55140be4a751:/usr/src/go/bin# ls darwin_386 dragonfly_386
freebsd_386 freebsd_arm gofmt
linux_arm nacl_amd64p32 netbsd_386 netbsd_arm
openbsd_amd64 plan9_amd64 windows_386 darwin_amd64 dragonfly_amd64 freebsd_amd64 go
linux_386 nacl_386
nacl_arm netbsd_amd64 openbsd_386
plan9_386 solaris_amd64 windows_amd64
其中:"$PWD",是指将当前目录挂载为docker的数据卷
第一个/go/src/myapp 表示为当前目录挂载至数据卷的名称
第二个/go/src/myapp 表示为进行shell后直接进入的工作目录
docker run --rm -it -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.3-cross bash $ for GOOS in windows linux; do > for GOARCH in386 amd64; do > go build -v -o myapp-$GOOS-$GOARCH //注意这里的减号间没有空格 > done > done
这里的 GOOS后windows linux指的是编译为什么平台,用到那个则输入那个,运行后输入出相应的结果:
main.go myapp-linux-386 myapp-linux-amd64 myapp-windows-386 myapp-windows-amd64
标签:
原文地址:http://www.cnblogs.com/forrestsun/p/4349485.html