golang - 交叉编译

1.背景

golang是跨平台语言,但是打包的二进制文件不适配各个环境

怎么办?

可以交叉编译

win系统打包为exe执行文件,

linux则是无后缀的执行文件,但是linux的cpu架构不同,二进制文件也是不同的,因此打包时需要指定cpu架构

2.解决

linux执行指令

lscpu

查看cpu信息

或者直接查询

uname -m

服务器一般是 x86_64架构

而安卓系统是 aarch64架构

 

执行指令 

go tool dist list

可得到go语言在 linux支持的  架构如下

aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
ios/amd64
ios/arm64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/loong64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
openbsd/mips64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm
windows/arm64

编译会自动识别当前cpu架构,如果需要指定编译cpu,

执行

//linux服务器  x86_64架构
SET GOOS=linux
SET GOARCH=amd64
go build xxx.go

//安卓  aarch64架构
SET GOOS=linux
SET GOARCH=arm64
go build xxx.go

可以不写  CGO_ENABLED

参数说明

GOARCH:编译目标平台的硬件体系架构(amd64, 386, arm, ppc64等)

GOOS:编译目标平台上的操作系统(darwin, freebsd, linux, windows)

CGO_ENABLED:代表是否开启CGO,1表示开启,0表示禁用。由于CGO不能支持交叉编译,所以需要禁用

 

因此可以连起来一条指令打包

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build xxx.go

 

posted @ 2023-04-24 13:29  岑惜  阅读(574)  评论(0)    收藏  举报