作为背景,我是一个开源项目的开发人员,一个名为 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/