我正在编译一个主要包含模板类的静态库。当使用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