簡體   English   中英

使用 VS2005 編譯時巨大的 static 庫文件,使用 gcc 編譯時正常大小

[英]Huge static library file when compiled using VS2005, normal size when compiled using gcc

我正在編譯一個主要包含模板類的 static 庫。 當使用 gcc 編譯時,生成的.a 文件大約為 40Mb 標記。 這是相當大的,但由於模板的數量,這並不完全出乎意料。 但是,當我使用 VS2005 編譯相同的代碼時,resulting.lib 文件進入(等待它。)575Mb ..

現在,在我被燒毀之前,我已經看到: 我怎樣才能讓我的非常大的程序鏈接? 這對於理解模板可能會使庫變大很有用,但我很難理解為什么兩個編譯器的輸出大小如此不同?

VS選項是:(調試)

/Od /D "WIN32" /D "_DEBUG" /D "_LIB" /D "_WIN32_WINNT=0x0500" /D "_MBCS" /Gm /EHsc /RTC1 /MDd /W4 /nologo /c /Wp64 /Zi /TP /errorReport:prompt

(發布)

/O2 /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_WIN32_WINNT=0x0500" /D "_MBCS" /FD /EHsc /MD /W4 /nologo /c /Wp64 /Zi /TP /errorReport:prompt

任何意見或指針都非常感謝..

調試版本禁用內聯以及丟棄重復代碼的 linker 選項,因此您可以獲得每個模板和內聯 function 的大量副本。

您可以在 linker 選項中使用/OPT:REF /OPT:ICF啟用它。 但它應該在發布版本中默認存在。

不幸的是,我認為這只有助於您的最終可執行文件,而不是中間庫。

您可以通過在 one.cpp 中顯式實例化您需要的模板實例來節省一些空間,並在編譯其他源文件時使用extern 模板來防止自動實例化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM