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 @   岑惜  阅读(480)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示