減小 golang 編譯出程式的體積
阿新 • • 發佈:2019-05-20
-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 可能並不能正確的壓縮所有平臺的程式,壓縮完成後最好自行在對應平臺