大道至简,知易行难
广阔天地,大有作为

Go语言生成的可执行文件瘦身

由于Go语言是静态编译的,编译打包之后基本就不会再对其他类库有依赖,所以Go语言的可执行文件会比较大。例如,《Windows环境下将Go语言编译为DLL并供.Net调用》中的例子所输出的DLL文件就高达16MB(当然,这个例子中还有其他的代码):

Go语言直接导出的DLL文件原始大小

Go语言直接导出的DLL文件原始大小

一、删除符号表和调试信息
首先,我们通过编译参数-ldflags删除符号表和调试信息:

可以发现大小了5MB:

删除符号表及调试信息

删除符号表及调试信息

如果要深究参数的含义,可以查看go build的帮助:

其中 -ldflags是传递给 go tool link的参数:

而:

其中的-s删除了符号表、-w删除了调试信息。

二、UPX压缩
其次,我们使用UPX(https://upx.github.io)进行压缩:

使用UPX压缩Go语言编译的DLL文件

使用UPX压缩Go语言编译的DLL文件

可执行文件从11MB压缩到了3.8MB。

最终实现的压缩效果为3.8/16=24%,即压缩后的大小是压缩前的四分之一。

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » Go语言生成的可执行文件瘦身

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址