cgo 与交叉编译
本文对应 成长路径 Go 低优先级:在 云管、网关 agent 中调用 C 库 或 交叉编译 Linux ARM 二进制。
交叉编译(无 cgo)
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o agent .CGO_ENABLED=0 时 Go 纯静态链接,部署简单,适合 纯 Go 项目。
cgo 何时需要
- 调用现有 C SDK(硬件、加密、DPDK 封装等)。
- 文件顶部:
/*
#cgo LDFLAGS: -lmylib
#include "mylib.h"
*/
import "C"交叉编译 + cgo
需 目标架构的 C 交叉工具链 与 sysroot:
export CGO_ENABLED=1
export GOOS=linux
export GOARCH=arm64
export CC=aarch64-linux-gnu-gcc
go build -o agent .与 应用交叉编译实战指南 工具链一致。
注意
- cgo 破坏 纯 Go 交叉编译 的简便性。
- 嵌入式 固件 极少用 Go;多用于 Linux 用户态 运维组件。