12

我和我的团队正在开发一个 VC++ 6 项目。我们都使用相同的代码库(使用版本控制系统),并且我们所有的编译器/链接器/环境设置(包括包含目录顺序),据我们所知,都是完全相同的。当然,我们使用相同的 VC++ 版本和相同的服务包 (VC6 SP6)。

问题是我们每个人构建的EXE都有点不同。

我知道每次在同一台计算机上构建 EXE 时,文件中有 3 个位置链接器存储时间戳。我不是在谈论这些差异。

虽然我们的 EXE 文件的长度完全相同,但当我们比较 EXE 时,有 1000 个字节不同。其中许多字节的值相差 0x20。

知道可能是什么原因吗?

编辑:调试构建(实际上,我们没有检查发布)。

编辑:区别在于二进制部分,而不是文本字符串。

编辑:所有开发人员都使用相同的驱动器/文件夹名称,用于源和产品。

4

5 回答 5

5

如果Debug版本已选中“增量链接”选项,则可能是差异的原因。

于 2010-01-15T08:25:55.883 回答
4

由于 0x20 是大写和小写 ASCII 字符之间的差异,我想知道这些差异是否恰好出现在编译器/链接器嵌入二进制文件的文件路径中(可能是断言消息?)。你的开发树会不会有所不同(一个盒子上的“C:\DevTrees\MyProject\SuperFoo”和另一个盒子上的“E:\work\projects\superfoo”?)。

于 2010-01-15T08:20:49.650 回答
3

我同意 NickD 的说法。在调试期间,增量链接不会从头开始重新构建 exe,而是会在每个构建中添加/插入/删除代码。

即 exe 的布局取决于自第一次编译以来的每一次编译。

干净的构建应该在相同的编译器上产生相同的结果。

于 2010-01-15T08:51:31.193 回答
1

这可能是巧合,但 0x20 是小写和大写 ASCII 字符的值之间的差异(例如,'A' == 65 == 0x41,'a' == 97 = 0x61)。

于 2010-01-15T08:22:03.360 回答
0

只是一个猜测:字符串的未初始化部分或一定长度的字符串属性,其中 #0 不在末尾?

于 2010-01-15T08:19:33.707 回答