c++ - 为什么我的 visual studio .obj 文件比输出的 .exe 文件大?

标签 c++ visual-studio visual-studio-2008

作为背景,我是一个开源项目的开发人员,一个名为 openframeworks 的 C++ 库,它是不同库的包装器,如 opengl、quicktime、freeImage 等。在下一个版本中,我们添加了一个名为 POCO 的 c++ 库,它在某些方面类似于 boost,因为它是 java 基础库的替代品类型功能。

我刚刚注意到,在我将 POCO 库添加为静态链接库的最新版本中,在编译过程中生成的 .obj 文件非常庞大 - 例如,几个 .obj非常小的 .cpp 文件每个文件为 2mb。整体编译的 .obj 文件大约 12mb 左右。另一方面,生成的 exe 很小——300k 到 1mb。

相比之下,在 code::blocks 中编译的相同库生成的 .obj 文件在 exe 中的大小大致相同 - 它们都相当小。

链接和 Visual Studio 中的 .obj 进程是否发生了我不明白的事情?例如,它是否在做某种智能预链接或其他事情,这会增加 .obj 的大小?我已经尝试了一些设置,例如增量链接等,但没有看到任何变化。

在此先感谢您提供任何想法或见解!

-扎克


注意:非常感谢!我刚刚试过,dumpbin,它说“匿名对象”并且不返回有关该对象的信息。 this可能是原因......


注意 2,在查看上面的链接后,删除 LTCG(链接时间代码生成 -/GL)后,.obj 文件要小得多,dumpbin 可以理解它们。再次感谢!!

最佳答案

无论如何我都不是 Visual Studio 专家,几乎没有使用过它,但我相信 Visual Studio 采用了链接时优化,这可以使生成的代码运行得更快,但会占用大量空间图书馆。此外,可能(我不知道内部原理)直到实际链接阶段才删除调试信息。

无论如何,我确信有人会给出更好/更详细的答案。

关于c++ - 为什么我的 visual studio .obj 文件比输出的 .exe 文件大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332946/

相关文章:

c++ - 为什么我的类友元函数无法访问具有命名空间的 protected 成员?

c++ - 预处理器宏作为其他宏的参数

c# - 打包vs2005项目

c++ - 添加引用项目 Blank Visual Studio 2013

c++ - 0xC0000005 : Access violation writing in loaction

visual-studio-2010 - 在 VS2010 中禁用代码折叠中的双行距

c++ - 支持相等比较的类的 constexpr ID

c++ - 来自 MS VC++ 2010 的链接器错误是什么意思

c++ - 将文件包含到整个项目中

c# - 无法在异常构造函数中写入字符串