golang编译后的文件通常较大,依赖文件也众多,为了简化分发,决定:1、将编译成独立一体的可执行文件,2、减少体积。
测试用例,reader.go(内容不重要,甚至包括了cgo)
go build reader.go
ldd reader
发现有不少依赖包,在整体打包前,还需要确认是否安装了glibc-static,否则会出错
# dnf --enablerepo=PowerTools install glibc-static
# go build -ldflags '-linkmode "external" -extldflags "-static" -w -s' reader.go
# upx -9 reader
- 设置编译参数-ldflags '-linkmode "external" -extldflags "-static"‘,实现整体打包;
- 设置编译参数-ldflags "-w -s"。其中-w为去掉调试信息(无法使用gdb调试),-s为去掉符号表,可有效减少编译后体积(一般能缩小30+%);
- upx -9,直接将3MB多的文件压倒800KB。(upx需要独立安装, https://github.com/upx/upx/releases )
来源:oschina
链接:https://my.oschina.net/faramita/blog/3163856