压缩编译体积
最后更新于:2022-04-02 02:37:01
[TOC]
## 方法
### 编译选项
```
go build -ldflags="-s -w" -o server main.go
```
* \-s:忽略符号表和调试信息。
* \-w:忽略DWARFv3调试信息,使用该选项后将无法使用gdb进行调试。
### 使用 upx 减小体积
安装
```
brew install upx
```
upx 有很多参数,最重要的则是压缩率,`1-9`,`1`代表最低压缩率,`9`代表最高压缩率。
```
go build -o server main.go && upx -9 server
```
#### upx 的原理
upx 压缩后的程序和压缩前的程序一样,无需解压仍然能够正常地运行,这种压缩方法称之为带壳压缩,压缩包含两个部分:
* 在程序开头或其他合适的地方插入解压代码;
* 将程序的其他部分压缩。
执行时,也包含两个部分:
* 首先执行的是程序开头的插入的解压代码,将原来的程序在内存中解压出来;
* 再执行解压后的程序。
也就是说,upx 在程序执行时,会有额外的解压动作,不过这个耗时几乎可以忽略。
如果对编译后的体积没什么要求的情况下,可以不使用 upx 来压缩。一般在服务器端独立运行的后台服务,无需压缩体积。
';