【问题标题】:size of library is bigger in release mode then debug mode in VS2010发布模式下库的大小比 VS2010 中的调试模式大
【发布时间】:2014-10-31 08:59:45
【问题描述】:

目前我正在使用 Visual Studio 2010(使用 C++)编译 DLMS 库(http://www.gurux.fi/index.php?q=DLMSCOSEMFAQ)。

我在调试和发布模式下成功编译了库。但是当我检查两个库的大小时,释放一个库(.lib)的大小超过两倍(76 MB)然后调试一个(31 MB)。

我认为发布版本比调试版本更小,对吗?

VS2010需要什么设置吗?

在此处查找构建发布日志http://pastie.org/9687316

这里的调试日志http://pastie.org/9687340

【问题讨论】:

  • 您可以优化速度或大小。例如,可以在更多地方内联更多函数以提高速度,但代价是更大的尺寸。
  • Visual Studio 可以执行优化,在牺牲可执行文件大小的同时提高运行时速度。检查配置属性->C/C++->优化->优化。
  • @ChrisWard1000 是优化问题,那么这不会考虑调试模式吗?因为在两种模式下相同的代码具有相同的设置。
  • 通常不希望在调试模式下进行优化,因为它会使调试代码变得困难,因为编译器会随机播放指令以提高速度。

标签: c++ visual-studio-2010 compilation


【解决方案1】:

更改设置 - 配置属性 > 常规 > 整个程序优化 从“使用链接时间代码生成”到“无全程序优化”

在此更改之后,我机器上的库大小从 76MB 降至 21MB

查看附件图片。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    您应该比较您的构建设置,尤其是。优化和库链接(静态/动态)。如果您不确定,请复制链接器和编译器的命令行,我们可以在此处为您检查。

    命令行可以在构建日志中找到,也可以在项目Properties/C/C++/Command LineProperties/Linker/Command Line中找到。

    对于编译器,要查找的最重要设置是/O/M

    对于链接器,我会看 esp。对于/OPT

    您的编译器开关是:

    /c /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _LIB /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Release\\" /Fd"Release\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt GuruxDLMS\GXDateTime.cpp

    导致你的图书馆变大的原因是/GL。解释见Release mode static library much larger than debug mode version

    【讨论】:

    • 请查看我编辑的问题以获取详细日志。另外properties 中没有linker 选项。
    【解决方案3】:

    我记得在同事抱怨后检查过这个。尝试使用编译器开关,直到大小相同,然后检查这些开关的文档

    【讨论】:

    • 您好,感谢您的回复,我是 VS 的新手。编译器切换直到大小相同是什么意思?
    • 项目属性中不同的链接和编译选项。您可以为每个构建设置执行命令,看看它们有何不同
    猜你喜欢
    • 2017-05-06
    • 2023-02-04
    • 1970-01-01
    • 2021-04-29
    • 2014-02-18
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多