静态和动态(调试)库之间的大小差异以及对最终exe的影响

Sam*_*rsa 7 boost dynamic-linking static-libraries static-linking dynamic-library

我从来没有把过多考虑到静态库和动态库之间的大小差异,直到今天我下载了升压的预建库.我发现boost的静态库远远大于动态库.

例如,调试多线程boost wave静态库97.7 mb的大小,而相同的库,但动态,只是1.4 mb大小(包括导入库和DLL)!这是一个巨大的差异.这是为什么?

第二个问题,如果我静态链接,比方说,wave图书馆.这是否意味着我的可执行文件的大小会超过97.7 mb

Mic*_*urr 4

静态库中包含完整的调试符号信息。对于 DLL,该信息将位于 .pdb 文件中(我认为该文件的大小与静态库类似)。

当您链接到静态库时,符号信息不会被复制到 .exe 中 - 它将被放置在 .pdb 文件中(如果您的构建配置为创建 .pdb 文件)。无论是否创建 .pdb,.pdb 文件都不需要与 .exe 一起分发。

在我从 boostpro.com 获得的预构建库下载中,我没有获得他们提供的 boost DLL 的 .pdb 文件。如果您自己构建 DLL,您可能会获得 .pdb 文件(尽管您可能必须设置一些配置选项,我不知道详细信息是什么)。


更新:

看来我对于轻松获取 boost DLL 的 .pdb 文件可能是错误的。来自http://comments.gmane.org/gmane.comp.lib.boost.build/23246

> Is there an additional option that I can pass on the command line to
> have the (correctly generated) PDB files also copied into the stage
> directory?
Run Code Online (Sandbox Code Playgroud)

目前还不行。您只能 在现在写有 或 的 地方 tools/build/v2/tools/package.jam进行添加。<install-type>PDB<install-type>SHARED_LIB<install-type>STATIC_LIB

  • 这非常有趣......他们正在编译带有调试信息的发布静态库吗?这将不允许整个程序优化,从而导致代码变慢(或者我在这里错了)? (2认同)