压缩 Golang 编译的可执行文件体积
自从接触 Golang 以来,一直对其编译出来的可执行文件有点看法,因为体积比较大。使用 go build av.go,编译简单的代码出来后就有近8M,当然,这是因为把 Go 的运行时环境也给打包进去了的原因,为了几k的源码实在是不划算,特别是在香蕉派/Firefly这些磁盘空间紧张的设备上面。
今天有搜索一下解决方法,Golang 的先行者给出的思路一共分为2步。
第一步,添加编译符号。
go build -ldflags “-s -w” av.go
-s 相当于strip掉符号表, 但是以后就没办法在gdb里查看行号和文件了。
-w 告知连接器放弃所有debug信息
衣服自己洗是使用 LiteIDE 来编写go代码的,按照下图添加即可,注意不要忘记添加引号,不然编译是无法通过的。
这样一来,编译后的文件就是5M多,看起来还是有点效果。
第二步,我们使用UPX来进一步压缩,其地址为 https://github.com/upx/upx,下载对应的版本即可。使用起来也很简单,默认即为压缩,输入upx av.exe 即可。
-d 解压缩
-l 查看压缩前后信息
现在再看,体积已经到1.7M左右了,效果很明显,就问你惊不惊喜,意不意外。
由于以前有木马病毒也使用UPX来加壳,导致现在杀毒软件对UPX不太友好。如果是部署在服务端或者Linux系统应该还好,特别是面向windows用户发布的,各位同学请慎重,可以考虑添加数字签名。至于如何使用数字签名,可以参考我的另外一个帖子。
对于产线的 Release 编译,使用自动化工具来做这个事情,应该都是小菜一碟了,就不提了。