Golang Linux、Windows、Mac 下交叉编译

时间:2021-05-24 12:43:04   收藏:0   阅读:0

前言

Golang 支持交叉编译, 即同一份代码,在一个平台上生成,然后可以在另外一个平台去执行。

之前写过一篇 Golang windows下 交叉编译 感觉写的不够全面,这篇作为补充。

交叉编译

Mac 上编译

# 生成编译文件,在 Linux 中运行
CGO_ENABLED=0  GOOS=linux  GOARCH=amd64  go build main.go

# 生成编译文件,在 Windows 中运行
CGO_ENABLED=0 GOOS=windows  GOARCH=amd64  go  build  main.go

Linux 上编译

# 生成编译文件,在 Mac 中运行
CGO_ENABLED=0 GOOS=darwin  GOARCH=amd64  go build main.go

# 生成编译文件,在 Windows 中运行
CGO_ENABLED=0 GOOS=windows  GOARCH=amd64  go build main.go

Windows 上编译

Windows 中的 terminal 不支持 shell , 这和 MacLinux 有点不同,这时可以写一个批处理程序,在里面去设置

# 设置 Mac 编译环境
SET  CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
# 设置 Linux 编译环境
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

参数说明

示例

查看默认值

>#go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/data/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build171002917=/tmp/go-build -gno-record-gcc-switches"
>#

更改

>#CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go env
GOARCH="amd64"  # 变更了
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=".exe"
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="windows" #  变更了
GOPATH="/data/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="0"  # 变更了
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-m64 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build668031908=/tmp/go-build -gno-record-gcc-switches"
>#

查看更改后的值

>#go env
GOARCH="amd64" # 还原了
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"      # 默认值
GOPATH="/data/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build240557259=/tmp/go-build -gno-record-gcc-switches"
>#
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!