我有一个带有标准调试/发布构建选项的静态库项目。我很有兴趣发现,虽然调试.lib是一个相当大的22Mb,但是发布的版本却高达100Mb。这也不是一个庞大的代码库,大约75个类,而且没有一个非常巨大。
我的问题是这是否正常,我是否应该关心?
答案 0 :(得分:4)
我会检查你是否在发布模式下静态链接库并在调试模式下动态链接它们。例如,您可能静态链接C ++运行库。
答案 1 :(得分:3)
我遇到了同样的问题。修复非常简单。项目属性/配置属性/常规/整个程序优化使用 无整个程序优化 而不是 使用链接时间代码生成 。我的静态库的大小从5MB减少到1.3MB
答案 2 :(得分:1)
理想情况下,释放lib应小于调试版本。
我猜你可能静态链接其他库,如MFC,ATL等......
检查你的发布和调试构建设置。
使用#pragma once
来避免多时间文件包含。
答案 3 :(得分:1)
不,这不正常。它应该是相反的方式。是的,你应该关心。
我首先再看一下尺寸,以确保我没有以某种方式转换版本和调试大小。
然后查看您要链接的库以进行发布和调试。您是否意外地将调试库链接到发货,并将库发送到调试?
仔细查看您的发布和调试设置。一些非常可疑的事情正在发生。
答案 4 :(得分:1)
是否有可能大量此代码内联,调试版本不是“内联”?
答案 5 :(得分:0)
我通常会期待反过来......
预处理程序包含的块中是否有大量代码只能包含在发布版本中?
在这种情况下,模板代码尤为可疑。
<强>更新强>
我认为问题很可能是由于在发布模式下链接到静态库,以及在调试模式下共享库...
+1 karoberts
答案 6 :(得分:0)
有一件事可以解释这样的大小:嵌入在发布版本中的调试符号(而不是构建为pdb)。您确定没有为发布版本生成调试符号吗? (您使用的是哪种Visual c ++?)