使用VS2005编译时的大型静态库文件,使用gcc编译时的正常大小

Ste*_*ieG 5 c++ gcc static-libraries visual-c++

我正在编译一个主要包含模板类的静态库.当使用gcc编译时,生成的.a文件大约是40Mb标记.这是相当大的,但由于模板量的增加,并非完全出乎意料.但是,当我使用VS2005编译相同的代码时,生成的.lib文件正在进入(等待它!)575Mb ..

现在,在我被烧伤之前,我已经看到:我怎样才能将我的大型程序链接起来?这对于理解模板可能使lib很大很有用,但我很难理解为什么两个编译器的输出大小如此不同?

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
Run Code Online (Sandbox Code Playgroud)

(发布)

/O2 /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_WIN32_WINNT=0x0500" /D "_MBCS" /FD /EHsc /MD /W4 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
Run Code Online (Sandbox Code Playgroud)

任何评论或指示都非常感谢..

Ala*_*kes 3

调试版本会禁用内联以及丢弃重复代码的链接器选项,因此您会获得每个模板和内联函数的大量副本。

/OPT:REF /OPT:ICF您可以在链接器选项中启用它。但它应该默认存在于发布版本中。

不幸的是,我认为这只对您的最终可执行文件有帮助,对中间库没有帮助。

您可以通过在一个 .cpp 中显式实例化所需的模板实例并使用extern 模板来防止在编译其他源文件时自动实例化来节省一些空间。