使用go进行交叉编译

关键点

## 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
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1415.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2024/10/29作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录