在 macOS 或 Windows 上编译 Linux 可执行文件需显式设置 GOOS=linux 和 GOARCH,若启用 cgo 则需配置交叉编译工具链或禁用 cgo;推荐使用 Docker 构建以规避环境差异。Go 编译 Linux 可执行文件,直接设 GOOS 和 GOARCHGo 默认按当前系统编译,想在 macOS 或 Windows 上生成 Linux 程序,不能只靠 go build,必须显式指定目标平台。不设 GOOS=linux,编译出来的是你本地系统的二进制,扔到 Linux 上直接报 cannot execute binary file: Exec format error。实操建议:立即学习"go语言免费学习笔记(深入)";在终端里先临时设置环境变量:GOOS=linux GOARCH=amd64 go build -o myapp main.go交叉编译 ARM64 Linux(比如跑在树莓派或云服务器上):用 GOARCH=arm64,不是 arm 或 aarch64如果项目用了 cgo(比如调了 SQLite、OpenSSL),默认会失败------Linux 的 C 标准库头文件和链接器在 macOS/Windows 上不存在cgo 开启时编译 Linux 程序,得配好交叉编译工具链只要代码里有 #import "C" 或依赖含 cgo 的包(如 database/sql 配 _ "github.com/mattn/go-sqlite3"),GOOS=linux 就不够用了。这时候 Go 会尝试调用 gcc,但宿主机的 gcc 不认识 sys/stat.h 这类 Linux 头文件。实操建议:立即学习"go语言免费学习笔记(深入)";禁用 cgo 是最简方案:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go启用 cgo 时,macOS 上需装 x86_64-linux-gnu-gcc(用 Homebrew:brew install x86_64-linux-gnu-binutils x86_64-linux-gnu-gcc),再设 CC_x86_64_linux_gnu=x86_64-linux-gnu-gccWindows 用户基本别硬刚 cgo 交叉编译,Docker 更稳:docker run --rm -v $(pwd):/src -w /src golang:1.22-alpine go build -o myapp main.goLinux 上运行失败?检查 libc 版本和静态链接即使成功编译出 Linux 二进制,放到旧版 CentOS 7 或 Alpine 容器里可能报 version `GLIBC_2.34' not found。这是因为 Go 默认动态链接宿主机的 libc(如果你在 Ubuntu 22.04 编译,它用的是较新 glibc)。 Mokker AI AI产品图添加背景
相关推荐
hhcgchpspk19 分钟前
flask服务端页面预防被爬措施小小张说故事23 分钟前
Python 里 copy.copy() 和 deepcopy() 到底差在哪:拆开 __copy__、__deepcopy__ 和那个防止无限递归的 memo 字典vipxieliang24 分钟前
Python collections:高效容器与实战案例青少儿编程课堂39 分钟前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关特创数字科技1 小时前
写了个 Windows 下载器:一键拉 GitHub / Gitee 源码,带 SHA256 校验codigger1 小时前
线上数据库连接池打满:从应急止损到架构根治的完整方案倔强的石头_1 小时前
集中式与分布式怎么选?我把手头11套系统重新过了一遍秤挖掘狂人1 小时前
线上数据库连接池打满:从应急止损到架构根治的完整方案Rainmicro2 小时前
【无标题】郝学胜-神的一滴2 小时前
AI 编程智能体 27:吃透MCP通信机制