Golang: Build: CGO

 31st August 2021 at 2:28pm

go build 命令,会把当前目录树下的 go 文件编译出来,放在 $GOPATH/pkg 的相应目录中。go 编译出来的可执行文件比较大,因为会包含 go runtime 在其中。

go 的内置库,有一些提供了带 cgo 和不带 cgo 两个版本,参考 Golang: Runtime,有详细描述。Go 默认使用 cgo 版本,如果想不用,可以置环境变量 CGO_ENABLED=0

CGO_ENABLED=0 go build

但是并不是 CGO_ENABLED=0 之后,就一定能编出完全无其他依赖的静态二进制文件。比如有些代码依赖 libpcap,而 libpcap 又没有纯 Go 的实现,那么 CGO_ENABLED=0 是会编译失败的,默认编出来的程序会依赖 libpcap 的动态库。大概率很难编出纯静态的。