天天看點

GCC編譯出來的檔案過大,如何瘦身?

過大第一個原因是包含了符号表,這個可以通過strip删除,檔案大小會立即縮水。strip指令提供了不同參數,友善可選擇的删除。

除此之外,兩個編譯參數“-ffunction-sections”和“-fdata-sections”,以及連結參數“-Wl,--gc-sections”可用來删除沒有使用到的符号,“-Wl,”表示後面是傳遞給連結器ld的參數。

objcopy也可用來删除一些未用的資料。

相關的:

-Wl,--version-script=export.lds

__attribute__ ((visibility ("hidden")))

readelf -s

readelf -S

gcc屏蔽“unused warn”,使用“__attribute__((unused))”,如:

static int __attribute__((unused)) my_function();

注意應用在函數聲明,而不是定義處,如果有聲明的話。

繼續閱讀