1. 程式人生 > >減小 golang 編譯出程式的體積

減小 golang 編譯出程式的體積

-ldflags

go build 編譯程式時可以通過 -ldflags 來指定編譯引數。

-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

UPX 壓縮

在某些裝置上動輒接近 10MB 的程式大小還是比較大的,這個時候可以採用 UPX 來進一步壓縮。好處是佔用磁碟空間小了,壞處是程式啟動時會先進行一æ­¥解壓縮,將程式碼還原到記憶體中,也就是說佔用的記憶體大小並不會減少,當然,對於現代裝置來說,啟動的耗時幾乎可以忽略。

通過各系統的包管理工具一般可以自動安裝 UPX。 例如 Centos 上 epel 庫 yum install -y upx。 macos 上通過 brew 安裝brew install upx

壓縮命令 upx -9 -o ./frpc2_upx ./frpc2

-o 指定壓縮後的檔名。-9指定壓縮級別,1-9。

壓縮後的檔案體積

-rwxr-xr-x  1 fate  staff   2998928 Dec 10 15:49 frpc2_upx

可以看到縮小了接近 5MB,效果顯著。

需要注意的是,UPX 可能並不能正確的壓縮所有平臺的程式,壓縮完成後最好自行在對應平臺