我正在編譯一個主要包含模板類的靜態庫。當使用gcc進行編譯時,生成的.a文件大約在40Mb左右。這是相當大的,但並不完全出乎意料,因爲大量的模板正在進行。但是,當我使用VS2005編譯相同的代碼時,生成的.lib文件進入(等待它!)575Mb ..使用VS2005編譯時,巨大的靜態庫文件,使用gcc編譯時的正常大小
現在,在我被燒燬之前,我已經看到:How can I get my very large program to link?,這對於瞭解模板可能會使庫很大,但我很難理解爲什麼兩個編譯器的輸出在大小上如此不同?
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
任何意見或指針大加讚賞..
您正在VS2005上構建一個Debug版本('/ D「_DEBUG」') - 這和GCC一樣嗎?這可能會造成相當大的差異。 – 2011-05-04 14:51:01
你是對的,它確實.. VS2005上的發佈版本是*僅* 350Mb ..儘管如此,仍然沒有足夠小! – StevieG 2011-05-04 14:54:27
您正在使用Linktime代碼生成(LTCG)嗎?這使靜態庫非常大,然後優化器在鏈接時縮減最終代碼。 – 2011-05-04 14:59:26