在 Ubuntu 上用 Go(Golang)编译程序,一般问题不多,但有几个常见坑和注意点,按使用场景给你总结一下:
Ubuntu 自带源里的 Go 通常比较旧:
go version
如果版本过低(比如 1.16 以下),建议:
wget https://go.dev/dl/go1.22.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
GOPATH,用 module 模式:go mod init projectname
go build
在 Ubuntu 编其他平台程序:
# Windows
GOOS=windows GOARCH=amd64 go build
# macOS
GOOS=darwin GOARCH=arm64 go build
⚠ 注意:
如果你的项目用了:
sqliteopencv那会启用 CGO:
CGO_ENABLED=1 go build
在 Ubuntu 上要注意:
sudo apt install gcc
否则会报错:
exec: "gcc": executable file not found
如果想完全静态编译:
CGO_ENABLED=0 go build
默认可能依赖 glibc:
ldd your_binary
想要静态:
CGO_ENABLED=0 go build -o app
Docker 里常用:
FROM golang:1.22 as build
CGO_ENABLED=0 go build
FROM alpine
COPY --from=build app /app
go build -ldflags "-s -w"
还可配合 upx:
sudo apt install upx
upx app
chmod +x app
./app
如果是 Web 服务:
sudo ufw allow 8080
| 报错 | 原因 |
|---|---|
gcc not found |
没装 gcc |
cannot find package |
没 go mod tidy |
permission denied |
没 chmod |
not a dynamic executable |
静态编译成功 |
如果你愿意,可以告诉我:
我可以直接给你一套最合适的编译命令。