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
本文来自博客园,作者:岑惜,转载请注明原文链接:https://www.cnblogs.com/c2g5201314/p/17349186.html
响应开源精神相互学习,内容良币驱除劣币
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下