温馨提示×

Golang打包的Ubuntu依赖如何处理

小樊
46
2026-06-30 20:21:38
栏目: 编程语言

Go(Golang)项目打包到 Ubuntu 时,依赖处理主要取决于你是:

  1. 只打包可执行文件
  2. 把 Go 程序做成 Ubuntu 的 deb 包
  3. 依赖系统库(CGO)

下面分情况说明 ✅


一、纯 Go(无 CGO)—— 最简单 ✅

如果你的项目 没有使用 CGO,Go 默认是 静态编译 的:

CGO_ENABLED=0 go build -o myapp

特点

  • ✅ 不依赖 Ubuntu 任何动态库
  • ✅ 只要架构一致(amd64 / arm64)就能跑
  • ✅ 无需处理 .deb 依赖

Ubuntu 运行环境

./myapp

基本不需要处理依赖


二、使用 CGO(依赖系统库)

如果你用了:

  • import "C"
  • sqlite
  • net(部分 DNS)
  • crypto
  • 图像处理、驱动等

构建示例

CGO_ENABLED=1 go build -o myapp

常见依赖库

功能 Ubuntu 依赖
C 标准库 libc6
SSL libssl-dev
SQLite libsqlite3-dev
GCC build-essential

查看依赖

ldd myapp

输出示例:

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
libpthread.so.0 => ...

三、制作 Ubuntu .deb 包(推荐方式)

1️⃣ 安装工具

sudo apt install build-essential devscripts debhelper

2️⃣ 项目结构示例

myapp/
├── debian/
│   ├── control
│   ├── rules
│   └── compat
├── main.go

3️⃣ debian/control(关键)

Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Depends: libc6, libssl3
Maintainer: you@example.com
Description: My Go App

Depends 就是 Ubuntu 依赖声明


4️⃣ 编译并打包

dpkg-buildpackage -us -uc

生成:

myapp_1.0.0_amd64.deb

5️⃣ 安装

sudo dpkg -i myapp_1.0.0_amd64.deb
sudo apt -f install   # 自动处理缺失依赖

四、静态链接(彻底避免 Ubuntu 依赖)

完全静态编译(推荐服务端)

CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
go build -ldflags '-extldflags "-static"' -o myapp

检查:

file myapp

输出应包含:

statically linked

✅ 可跨 Ubuntu 版本直接运行


五、Docker 场景(最省事)

FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o app

FROM ubuntu:22.04
COPY --from=builder /app/app /usr/local/bin/app
CMD ["app"]

✅ 宿主机无需任何 Go 依赖


六、总结建议 ✅

场景 推荐方案
纯 Go 程序 静态编译
有 CGO debian/control 声明依赖
服务器部署 静态二进制 / Docker
提供软件给用户 .deb + Depends

如果你愿意,可以告诉我:

  • ✅ 是否使用 CGO?
  • ✅ 是否打成 .deb
  • ✅ 目标 Ubuntu 版本(18.04 / 20.04 / 22.04)?

我可以直接帮你 写完整的 deb 打包示例或 Dockerfile

0