gpt4 book ai didi

c++ - 使用VS2005编译时静态库文件巨大,使用gcc编译时正常大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:36 25 4
gpt4 key购买 nike

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

现在,在我被烧毁之前,我已经看到: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

非常感谢任何意见或指示..

最佳答案

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

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

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

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

关于c++ - 使用VS2005编译时静态库文件巨大,使用gcc编译时正常大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com