2017-07-28 47 views
0

從Makefile構建我的應用程序我發現從代碼中排除某些類及其使用對構建的應用程序的大小沒有影響。在編譯期間包含未使用的代碼

// some file 
// #include "SomeClass.h" 
....... 
void myfunc() 
{ 
    SomeClass _cl; 
    // do something with _cl etc... 
    // _cl.SomeFunc(); 
    ......... 
} 


Makefile 
...... 
SOURCES = ... SomeClass.cpp .... etc 

但是,如果我從Makefile中刪除SomeClass.cpp,那麼構建的應用程序的大小真的變得更小。爲什麼gcc不優化已編譯的代碼並且不會從最終結果中排除未使用的SomeClass?

+1

你使用了哪些編譯器標誌? – systemcpro

+0

不知道我是否在你的情況下有所作爲,但嘗試編譯器標誌'-Os'來優化大小。沒有lto gcc的 – Klaus

+2

無法判斷你的類是否被另一個編譯單元使用。 – bolov

回答

3

您可以通過編譯標誌來配置它。在linux/gcc上,未使用的符號不會從二進制中消除 - 當您使用dl_open()二進制時,它們可能會有用。如果要消除未使用的代碼,請將-ffunction-sections和-fdata-sections添加到您的編譯選項,將-gc-sections添加到您的鏈接器選項。編譯選項將確保每個函數都放在一個單獨的部分(而不是每個文件的一部分),鏈接器選項將丟棄未使用的部分。