9

我有一个 C++ 编译的静态库,其中包含大约 15 个类及其成员函数和内容,并且编译后几乎有 14 兆字节。它链接到谷歌的密集哈希表库和 MPIR,这就像 Windows 的 GMP,但我在一个普通的 exe 中完成了它,它只有几千字节。为什么它如此庞大?我能做些什么来减小它的大小?似乎还有其他程序比我的要复杂得多,但要小得多。

使用 Visual C++ 编译,命令行为:

/Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE"
/D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t
/Zc:forScope /Fp"Release\ang.pch" /Fa"Release\" /Fo"Release\"
/Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue
4

1 回答 1

19

静态库与完成的二进制文件的格式有很大不同;部分原因是它有更多的信息。从本质上讲,静态库就像从翻译单元生成的所有 .obj 文件的 ZIP。这允许链接器丢弃未使用的函数,如果您使用的是 LTCG,它允许内联器做出跨模块决策和其他此类优化。

此外,某些编译模式会将调试符号直接嵌入到 .lib 中,从而无需单独的 .pdb 文件。

通常你不需要担心静态库的大小;链接器将在构建最终可执行文件时丢弃所有额外信息。

于 2010-07-26T04:46:10.277 回答