Go语言在默认情况下是静态链接的:

但是,有一些库可能会导致动态链接:

-ldflags="-extldflags --static"
go build -ldflags="-extldflags --static"

当然,还存在一些第三方库,因调用了一些 glibc 中不支持静态链接的函数,而导致无法静态链接:

对于这类情况,如果坚持一定要静态链接,那么可以弃用 glibc 库,改用 musl libc 库。

如果你使用的操作系统是 Debian / Ubuntu ,那么可以运行如下命令安装 musl libc 库:

sudo apt-get install musl-dev musl-tools

然后使用 musl libc 库来静态链接,命令是:

CC=musl-gcc go build -tags musl -ldflags="-extldflags --static"

于是,静态链接成功。