文章目录
关键点
## 1、查看支持哪些os/cpu架构
go tool dist list
## 2、是否要关闭cgo(默认不指定时是开启的)
CGO_ENABLED=0 表示禁用(这种方式最为简单且便于兼容性)
CGO_ENABLED=1 启用启用
如果项目确实依赖 cgo,可以在交叉编译环境中安装目标平台的 C 编译器(例如 arm-linux-gnueabihf-gcc 等交叉编译工具链)。
但是,这种方式需要较为复杂的环境配置,并且还需要确保第三方 C 库能够适用于目标平台。
## 3、变量参数说明
GOOS # 什么操作系统 windows|linux|android
GOARCH # 什么架构 x86|arm|arm64
分平台编译示例
## 将a.go编译x86架构上的windows版本
set GOARCH=x86
set GOOS=windows
set CGO_ENABLED=0
go build -o ./release/x86-windows/monitor.exe a.go
## 将a.go编译x86架构上的linux版本
set GOARCH=x86
set GOOS=linux
set CGO_ENABLED=0
go build -o ./release/x86-linux/monitor.out a.go
## 将a.go编译arm架构上的linux版本
set GOARCH=arm64
set GOOS=linux
set CGO_ENABLED=0
go build -o ./release/arm-linux/monitor.out a.go
示例、一次编译成多个平台的二进制程序
#!/bin/bash
# 指定要编译的源文件
SOURCE_FILE="a.go"
# 编译目标平台列表
platforms=("windows/amd64" "linux/amd64" "linux/arm" "linux/arm64")
# 遍历每个平台进行编译
for platform in "${platforms[@]}"
do
IFS="/" read -r GOOS GOARCH <<< "$platform"
output_name="a-$GOOS-$GOARCH"
# 如果是 Windows 平台,添加 .exe 后缀
if [ "$GOOS" = "windows" ]; then
output_name+=".exe"
fi
# 设置环境变量并禁用 CGO 编译
echo "编译 $SOURCE_FILE 为 $output_name"
env CGO_ENABLED=0 GOOS="$GOOS" GOARCH="$GOARCH" go build -o "$output_name" "$SOURCE_FILE"
# 检查编译是否成功
if [ $? -ne 0 ]; then
echo "编译 $GOOS/$GOARCH 失败!"
else
echo "编译 $GOOS/$GOARCH 成功:$output_name"
fi
done
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论