眾所周知,gcc編譯的原始程式一般很大,其實有幾種方法能大大減小目標**的體積,一般有以下幾種方法。
1、禁用除錯資訊
release編譯時不要加上-g開關。
2、使用-os編譯程式。
不要使用-funroll-loops等可以加速程式執行但是會大大增加目標**體積的開關。
3、編譯後的程式使用strip去除符號和偏移(限於可執行程式和共享庫,其他易出問題)。
4、如果你不需要rtti,編譯時加入-fno-rtti。
5、如果你不需要處理c++異常,編譯時加入-fno-exceptions。
6、使用upx之類的可執行程式壓縮程式(只推薦用於可執行程式,用於其他也可,但是較浪費記憶體)。
例如,使用wxwidgets動態編譯的程式初始體積可能有429kb,經過以上方式(未經upx壓縮)處理後,體積減少為108kb,upx壓縮後體積為35kb。
7、gcc引數-wl,–gc-sections,不鏈結未用函式,減小可執行檔案大小
詳細參考:
linux gcc 靜態編譯和動態編譯
一 編譯和鏈結選項 第一步 預編譯。gcc e hello.c o hello.i e引數 gcc在完成預處理後,停止編譯過程。預處理的巨集定義展開到 hello.i中。第二步 生成目標 gcc c hello.i o hello.o c引數 生成目標 將 hello.i編譯為目標 也可以通過原始檔...
linux gcc編譯引數
gcc 編譯 hello.c hello.i 預處理階段,生成中間檔案 hello.s 彙編階段,生成彙編檔案 hello.o 編譯階段,生成二進位制 檔案 hello 鏈結階段,生成可執行程式 預處理階段,主要是將巨集定義替換,條件編譯 標頭檔案包含,可以cat hello.i檔案檢視 gcc e...
linux gcc編譯選項
1 安全編譯選項 作業系統提供了許多安全機制來嘗試降低或阻止緩衝區溢位攻擊帶來的安全風險,包括dep aslr等。在使用gcc進行編譯時,可以使用gcc的編譯選項來避免堆疊溢位 整數溢位等問題。2 checksec.sh 3 aslr 位址隨機化 aslr address space layout ...