go build 編譯程序時能夠經過 -ldflags
來指定編譯參數。macos
-s
的做用是去掉符號信息。 -w
的做用是去掉調試信息。工具
測試加與不加 -ldflags 編譯出的應用大小。測試
go build -o tmp/frpc ./cmd/frpc -rwxr-xr-x 1 fate staff 12056092 Dec 10 15:49 frpc go build -ldflags "-s -w" -o tmp/frpc2 ./cmd/frpc -rwxr-xr-x 1 fate staff 8353308 Dec 10 15:49 frpc2
在某些設備上動輒接近 10MB 的程序大小仍是比較大的,這個時候能夠採用 UPX 來進一步壓縮。好處是佔用磁盤空間小了,壞處是程序啓動時會先進行一æ¥解壓縮,將代碼還原到內存中,也就是說佔用的內存大小並不會減小,固然,對於現代設備來講,啓動的耗時幾乎能夠忽略。ui
經過各系統的包管理工具通常能夠自動安裝 UPX。 例如 Centos 上 epel 庫 yum install -y upx
。 macos 上經過 brew 安裝 brew install upx
。調試
壓縮命令 upx -9 -o ./frpc2_upx ./frpc2
code
-o
指定壓縮後的文件名。-9
指定壓縮級別,1-9。內存
壓縮後的文件體積rpc
-rwxr-xr-x 1 fate staff 2998928 Dec 10 15:49 frpc2_upx
能夠看到縮小了接近 5MB,效果顯著。cmd
須要注意的是,UPX 可能並不能正確的壓縮全部平臺的程序,壓縮完成後最好自行在對應平臺運行測試一下。編譯