为什么构建相同的项目会为每个开发人员生成不同的 EXE 文件

发布于 2024-08-17 14:05:02 字数 454 浏览 7 评论 0原文

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

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

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

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

知道原因是什么吗?

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

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

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

My team and I are developing a VC++ 6 project.
We are all using the same code-base (using version control system), and all our compiler/linker/environment-settings (including include directories order), as far as we can tell, are exactly the same.
Of course we are using the same VC++ version with the same service packs (VC6 SP6).

The problem is that the EXE that each one of us build is a little bit different.

I know that every time you build an EXE on the same computer, there are 3 locations in the file where the linker stores a time-stamp. I'm not talking about these differences.

Though our EXE files are exactly the same length, when we compare the EXEs, there are 1000's of bytes that differs. Many of those bytes differs by 0x20 in value.

Any idea what may be the reason?

Edit: Debug build (Actually, We didn't check the release).

Edit: The differences are in binary sections, not in text-strings.

Edit: All of the developers are using the same drive/folder names, for source and for products.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

迷途知返 2024-08-24 14:05:02

如果调试版本选中了“增量链接”选项,那么这可能就是差异的原因。

If Debug version has the option "Link incrementally" checked, then probably it's the reason for the diffs.

反话 2024-08-24 14:05:02

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

Since 0x20 is the difference between upper and lower case ASCII characters I wonder if these differences happen to be in file paths that the compiler/linker embed in the binary (assert messages perhaps?). Could your dev trees be different ("C:\DevTrees\MyProject\SuperFoo" on one box and "E:\work\projects\superfoo" on another?).

逆光下的微笑 2024-08-24 14:05:02

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

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

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

I agree with what NickD says. During debug, incremental linking is on which doesn't rebuild the exe from scratch, but appends/inserts/removes code here and there for each build.

I.e. the layout of the exe depends on every compilation since the first.

A clean build should yield identical results on identical compilers.

玩套路吗 2024-08-24 14:05:02

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

It might be coincidence, but 0x20 is the difference between the values of lower-case and upper-case ASCII characters (eg 'A' == 65 == 0x41, 'a' == 97 = 0x61).

唱一曲作罢 2024-08-24 14:05:02

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

Just a guess: uninitialized parts of strings or string properties of a certain length where the #0 is not at the end ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文