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工具
简介:UPX是一个可执行文件的带壳压缩打包器,可以把可执行文件体积压缩到很小
原理:简单理解就是在程序头插入解压代码,然后将后面的程序压缩,执行的时候先在内存中对程序解压,然后执行,不过损耗很小
场景:主要用于一些对程序大小敏感的场景,个人主要用来做一些小工具
用法:下载对应系统的程序,然后用命令解压,压缩级别有10个可选项,[-1, -9]和--best,一般使用4,5,6三个级别,相对压缩率和执行效率达成平衡,如果更追求压缩率可以用7,8,9
1 upx -9 xxx.exe 2 3 upx --brute --no-lzma xxx.exe # 该命令可以追求最佳压缩比