繁体   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