我和我的团队正在开发一个VC ++ 6项目。 我们都使用相同的代码库(使用版本控制系统),据我们所知,所有编译器/链接器/环境设置(包括包含目录顺序)完全相同。 当然,我们使用相同的VC ++版本和相同的服务包(VC6 SP6)。
问题在于我们每个人构建的EXE都有点不同。
我知道每次在同一台计算机上构建EXE时,文件中有3个位置,链接器会在其中存储时间戳。我不是在谈论这些差异。
虽然我们的EXE文件长度完全相同,但是当我们比较EXE时,有1000个不同的字节。其中许多字节的值相差0x20。
任何想法可能是什么原因?
编辑:调试版本(实际上,我们没有检查版本)。
编辑:区别在于二进制部分,而不是文本字符串。
编辑:所有开发人员都使用相同的驱动器/文件夹名称,包括源和产品。
答案 0 :(得分:5)
如果Debug
版本选中“逐步增加链接”选项,则可能是差异的原因。
答案 1 :(得分:4)
由于0x20是大写和小写ASCII字符之间的区别,我想知道这些差异是否恰好出现在编译器/链接器嵌入二进制文件的文件路径中(可能是断言消息?)。你的开发树可以不同(一个盒子上的“C:\ DevTrees \ MyProject \ SuperFoo”和另一个盒子上的“E:\ work \ projects \ superfoo”)。
答案 2 :(得分:3)
我同意NickD所说的话。在调试期间,增量链接不会从头开始重建exe,但会为每个构建添加/插入/删除代码。
即。 exe的布局取决于自第一个以来的每个编译。
干净的构建应该在相同的编译器上产生相同的结果。
答案 3 :(得分:1)
这可能是巧合,但0x20是小写和大写ASCII字符的值之间的差异(例如'A'== 65 == 0x41,'a'== 97 = 0x61)。
答案 4 :(得分:0)
只是一个猜测:未初始化的字符串部分或特定长度的字符串属性,其中#0不在最后?