压缩编译体积

最后更新于: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 来压缩。一般在服务器端独立运行的后台服务,无需压缩体积。
';