代码笔记 | 📅 2021-12-02 | golang
go build -o 输出文件 ./main
优化编译尺寸,可以使用 -ldflags '-s -w'
go build -ldflags '-s -w' -o 输出文件 ./main
其中 -w
会移除调试信息,-s
会同时移除调试信息和符号表,使用 -s
会使得编译出来的文件更小。也可以两者同时使用,但是同时使用的情况下,-w
显得没有意义。
需要注意的是,使用 -w
或者 -s
后,会使得程序不可调试,在开发阶段应按需使用。
默认情况下,golang编译会使用一些动态链接库。比如在使用网络库后,会依赖 glibc 。
可以通过添加参数 -ldflags '-linkmode "external" -extldflags "-static"'
使所有库都静态编译,以移除动态依赖。
go build -ldflags '-linkmode "external" -extldflags "-static"' -o 输出文件 ./main
提示:
在linux下可以通过 ldd
命令查看可执行文件的动态依赖。
对比如下:
$ go build -o main main.go
$ ldd main
linux-vdso.so.1 (0x00007ffdb19e2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0cb33a1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0cb31dc000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0cb33dc000)
$ go build -ldflags '-s -w -linkmode "external" -extldflags "-static"' -o main main.go
$ ldd main
不是动态可执行文件
$
go build -ldflags '-s -w -linkmode "external" -extldflags "-static"' -o 输出文件 ./main