【问题标题】:VS 2013 /Zi Compiler Option doubles size of static libraryVS 2013 /Zi 编译器选项使静态库的大小翻倍
【发布时间】:2016-01-04 13:42:49
【问题描述】:

我想知道为什么在 VS 2013 下 /Zi 编译器选项几乎使构建静态库的大小增加了一倍。

据我了解 /Zi 选项,所有生成的调试信息都存储在 .pdb 文件中,并且只为每个 .obj 文件添加指向该文件的链接。

似乎只有 .exe 和 .dll 文件大小保持不变,无论选项是 /Zi 还是 None。

我只能使用 VS 2013 进行测试,所以我不知道其他版本的 VS 是否也会发生这种情况。

【问题讨论】:

    标签: c++ visual-studio-2013 static-libraries filesize debug-symbols


    【解决方案1】:

    这主要来自于.debug$S部分的增加。原因是当使用 PDB 时,并非所有关于 debug 的内容都放入 pdb,调试符号仍然保存在 h object/lib 文件的 .debug$S 部分中。放入 pdb 的内容至少包含类型信息,这就是使用 /Zi 或 /ZI 时 .debug$T 变得非常小的原因,即在这些情况下它只包含指向 pdb 文件的指针。

    你可以使用

    dumpbin.exe your_lib.lib
    

    显示结果。

    对于大型库,大小可以从 4MB 增加到 20MB。

    对于一个非常简单的库:

    没有调试:

           4 .bss
          60 .chks64
         138 .debug$S
          D2 .drectve
          18 .pdata
           8 .rtc$IMZ
           8 .rtc$TMZ
          2C .text$mn
          10 .xdata
    

    /子:

           4 .bss
          98 .chks64
         848 .debug$S
          E0 .debug$T
         113 .drectve
           4 .msvcjmc
          18 .pdata
           8 .rtc$IMZ
           8 .rtc$TMZ
          76 .text$mn
          10 .xdata
    

    /ZI:

           4 .bss
          C0 .chks64
        1454 .debug$S
          E0 .debug$T
         135 .drectve
           4 .msvcjmc
          18 .pdata
           8 .rtc$IMZ
           8 .rtc$TMZ
          89 .text$mn
          20 .xdata
    

    /Z7:调试信息现在嵌入到 .debug$P 部分,.debug$S 也缩小了一点。

           4 .bss
          98 .chks64
        1210 .debug$P
         848 .debug$S
         78C .debug$T
         113 .drectve
           4 .msvcjmc
          18 .pdata
           8 .rtc$IMZ
           8 .rtc$TMZ
          76 .text$mn
          10 .xdata
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多