golang编译压缩文件体积

1、编译时使用-ldflags "-s -w" 去除符号表和调试信息

代码示例:

 1 function compile() {
 2   ### 编译
 3   rm -rf ./src/parser/stdfv4_raw.exe
 4   CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o stdfv4_raw.exe ./src/parser
 5   echo "compile success!"
 6 }
 7 
 8 function compress() {
 9   upx -6 ./stdfv4_raw.exe
10   # upx --brute --no-lzma ./stdfv4_raw.exe
11 }
12 
13 if [ "$1" = "release" ]; then
14   compile
15   compress
16 elif [ "$1" = "compile" ]; then
17   compile
18 else
19   echo "Usage: \"./build.sh [release|compile]\""
20 fi

 

2、使用UPX工具

官网:https://upx.github.io/

简介:UPX是一个可执行文件的带壳压缩打包器,可以把可执行文件体积压缩到很小

原理:简单理解就是在程序头插入解压代码,然后将后面的程序压缩,执行的时候先在内存中对程序解压,然后执行,不过损耗很小

场景:主要用于一些对程序大小敏感的场景,个人主要用来做一些小工具

用法:下载对应系统的程序,然后用命令解压,压缩级别有10个可选项,[-1, -9]和--best,一般使用4,5,6三个级别,相对压缩率和执行效率达成平衡,如果更追求压缩率可以用7,8,9

1 upx -9 xxx.exe
2 
3 upx --brute --no-lzma xxx.exe # 该命令可以追求最佳压缩比 

 

posted @ 2024-10-24 20:19  water160  阅读(6)  评论(0编辑  收藏  举报