加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang交叉编译

发布时间:2020-12-16 19:19:11 所属栏目:大数据 来源:网络整理
导读:记录点分享http://gitos.org/2016/04/24/golang-cross-compiler/ 一 环境安装 在苹果系统上安装golang环境非常简单,用brew直接 brewinstallgo 就可以安装好golang的开发环境. 如果没有安装brew,则强烈建议安装. 实在不想的,那么就下着mac版的golang,在 ~/.ba

记录点分享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来进行交叉编译.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读