golang交叉编译
记录点分享http://gitos.org/2016/04/24/golang-cross-compiler/ 一 环境安装在苹果系统上安装golang环境非常简单,用brew直接 brewinstallgo 就可以安装好golang的开发环境. 如果没有安装brew,则强烈建议安装. 实在不想的,那么就下着mac版的golang,在 ~/.bash_profile 上加入 exportGOROOT=/yourgopath exportGOPATH=/yourdevelopgopath 要交差编译,必须要有对应平台的golang编译环境,这里的环境不是指系统环境,是指编译软件环境. 可以查看$GOROOT/pkg目录, SZCMAC:pkgshizhengchu$ll total0 drwxr-xr-x9shizhengchuadmin30641814:22. drwxr-xr-x16shizhengchuadmin54441208:13.. drwxr-xr-x5shizhengchuadmin17041814:22bootstrap drwxr-xr-x58shizhengchuadmin197241815:32darwin_amd64 drwxr-xr-x57shizhengchuadmin193841208:13darwin_amd64_race drwxr-xr-x5shizhengchuadmin17041208:13include drwxr-xr-x58shizhengchuadmin197241814:23linux_amd64 drwxr-xr-x3shizhengchuadmin10241814:22obj drwxr-xr-x4shizhengchuadmin13641814:23tool 我的是mac系统,默认情况下是没有linux_amd64这个目录的,(已经被我添加了编译环境),所以如果在苹果系统上想要编译出linux amd64上的程序,必需要生成对应的编译环境. 二 生成linux amd64编译环境交叉编译需要指定要目标的系统和cpu架构,这里我的目标系统是linux系统,cpu是amd64指令集. 所以在golang环境中,配置环境变量GOARCH指定cpu架构,GOOS指定操作系统. 我们来查看一下当前golang的环境变量的配置: SZCMAC:pkgshizhengchu$goversion goversiongo1.6.1darwin/amd64 SZCMAC:pkgshizhengchu$goenv GOARCH="amd64" GOBIN="" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/shizhengchu/Documents/devsrc/gospace" GORACE="" GOROOT="/usr/local/opt/go/libexec" GOTOOLDIR="/usr/local/opt/go/libexec/pkg/tool/darwin_amd64" GO15VENDOREXPERIMENT="1" CC="clang" GOGCCFLAGS="-fPIC-m64-pthread-fno-caret-diagnostics-Qunused-arguments-fmessage-length=0-fno-common" CXX="clang++" CGO_ENABLED="1" 看出这是苹果系统上的环境变量,要编译linux 上的需要设置 GOOS=linuxGOARCH=amd64 我们进入到golang的源码目录,生成linux编译环境 cd$GOROOT/src CGO_ENABLED=0GOOS=linuxGOARCH=amd64./make.bash--no-clean 但是出错了,提示我们GOROOT_BOOTSTRAP没有设置. 这是为什么呢? 因为golang自1.4后,就由golang来编译golang了,不使用GCC来编译了.所以,我们要copy一份golang的开发环境到其它目录,我然指定这个目录为GOROOT_BOOTSTRAP,使用GOROOT_BOOTSTRAP指定的目录来编译golang 的linux编译环境. 然后再执行make.bash cd$GOROOT cd.. cp-Rlibexec/Users/shizhengchu/go exportGOROOT_BOOTSTRAP=/Users/shizhengchu/go cd$GOROOT/src CGO_ENABLED=0GOOS=linuxGOARCH=amd64./make.bash—no-clean 现查看$GOROOT/pkg就可以看到linux_amd64了. 三 交叉编译进入工程,设置GOOS和GOARCH,再进行编译 GOOS=linuxGOARCH=amd64gobuild-omoxiemain.go 这样编译出来的二进制程序已经是linux amd64上的程序了. 因为我们的环境变量都是在shell是设置,关闭shell后不会影响系统的环境变量.为了简便,避免每次编译都要输入一长串,可以建立一下make.linux_amd64文件,写入 GOOS=linuxGOARCH=amd64gobuild-omoxiemain.go 这样,就可以sh make.linux_amd64来进行交叉编译. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |