为什么我的静态库如此庞大?

Fog*_*lio 8 c++ linker static-libraries static-linking

我有一个C++编译的静态库,包含大约15个类及其成员函数和东西,并且已编译,它几乎是14兆字节.它链接到谷歌的密集哈希表库和MPIR,就像GMP for Windows一样,但我在普通的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
Run Code Online (Sandbox Code Playgroud)

Bil*_*eal 17

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

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

通常,您不必担心静态库大小; 在构建最终可执行文件时,链接器将丢弃所有额外信息.