作为背景,我是一个开源项目的开发人员,一个名为开放框架 http://www.openframeworks.cc,这是不同库的包装器,例如 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 大小?我已经尝试了一些设置,例如增量链接等,但没有看到任何变化。
预先感谢任何尝试的想法或见解!
-zach
注:非常感谢!我刚刚尝试过 dumpbin,它表示“匿名对象”并且不返回有关该对象的信息。this http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/3c472c55-25f5-461a-b3be-97d6239e7b49/可能是因为......
注意 2,检查上面的链接后,删除 LTCG(链接时代码生成 - /GL),.obj 文件要小得多,并且 dumpbin 可以理解它们。再次感谢 !!
从任何角度来说,我都不是 Visual Studio 专家,几乎没有使用过它,但我相信 Visual Studio 采用了链接时优化,这可以使生成的代码运行得更快,但会占用库中的大量空间。另外,可能(我不知道内部原理)调试信息直到实际链接阶段才被剥离。
我确信无论如何都会有人给出更好/更详细的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)