1 压缩前后对比图
只有一句hello world!竟然打包后达到了2.1M
2 详细过程
2.1 参数打包
2.1.1 使用带有参数的go build 进行打包
go build -ldflags "-s -w" hello.go
- -ldflags ‘[pattern=]arg list’ arguments to pass on each go tool link invocation.每个go工具的参数列表连接调用的传递
- -s 去掉符号表,堆栈跟踪时不显示任何文件名和行号信息,跟C/C++的strip效果一样
- -w 去掉DWARF调试信息,使程序不能gdb调试
2.1.2 压缩结果
我们可以看到,使用参数进行打包后,由原本的2.1M下降到了1.4M
2.2 加壳压缩
2.2.1 安装upx
这里我以macOS为例,我们使用brew进行安装upx(类似centos下的yum,ubuntu的apt-get)
brew install upx
如下图所示,则代表安装成功!
注意
upx在mac平台下的3.9.5版本有bug!!!
给golang加壳后会导致无法运行issues222
需要使用最新版的3.9.6进行加壳
brew install --HEAD upx
2.2.2 使用upx进行加壳压缩
使用下面的命令对已生成的可执行文件进行压缩打包
upx ./hello
从下面的截图中,我们可以看出压缩比
为37%
,文件大小由1417520
压缩到524944
2.2.3 压缩结果
我们可以看到,对可执行文件进行加壳压缩后,由原本的1.4M下降到了525K