Debian下Golang打包问题排查与解决
一、快速定位与通用修复
二、使用 dh-golang 的标准打包流程
三、常见报错与对应处理
| 症状 | 可能原因 | 解决要点 |
|---|---|---|
| make[1]: go: Command not found | 构建环境未装 golang-go 或 PATH 未包含 $GOROOT/bin | 安装 golang-go;在 rules 或干净环境中显式设置 PATH;验证 go version |
| 拉取依赖超时/失败 | 国内网络访问模块仓库受限 | 设置 GOPROXY=https://goproxy.cn,direct;再 go mod tidy |
| 构建时报错“undefined reference …”或找不到头文件 | 启用了 CGO 但缺少系统库 | 不需要 C 库时设 CGO_ENABLED=0;需要 C 库时安装对应 -dev 包并配置 CGO |
| 构建成功但运行报“找不到共享库” | 二进制是动态链接(CGO 开启) | 改为纯静态:CGO_ENABLED=0;或为目标发行版准备相应运行时库 |
| lintian 警告过多(如 binary-without-manpage) | Go 常为单二进制,缺少手册页等 | 使用 lintian-overrides 合理覆盖;或补 man 页面后再构建 |
| 仅想快速出二进制包 | 不依赖完整 Debian 构建链 | 预编译后用 dpkg-buildpackage -us -uc -b 直接打包二进制包 |
四、实用命令清单
五、仍未解决时的最小可复现材料