在不同系统上构建相同

时间:2009-08-03 08:19:21

标签: c++ dll visual-studio-2005 compiler-construction linker

我有3台构建机器。一个在Windows 2000上运行,一个运行XP SP3,另一个运行64位Windows Server 2008。 我有一个原生的C ++项目要构建(我正在使用visual studio 2005 SP1构建)。 我的目标是使用这些构建机器“完全”构建相同的dll。

我的意思是一点一点(当然除了构建时间戳)。

使用win2k和winxp我会得到相同的dll。但它们与使用win2008服务器构建的dll不同。 我已经设法得到几乎相同的dll,但有一些差异。在反汇编文件后,我发现函数顺序不一样(3个函数的顺序不同)。

有谁知道这可能是什么原因?

还有一个问题: 在vcbuild.exe中我找到了一个开关/ ORDER。以功能订单文件为输入。任何人都知道该文件应该是什么样的?

3 个答案:

答案 0 :(得分:7)

您可能认为编译纯粹是确定性的(相同的输入每次都提供相同的输出)但不一定是这种情况。例如,考虑优化器 - 这将需要一些内存来工作,可能更多的更高优化方法。如果在一台机器上内存分配失败(因为机器内存较少),那么编译器可以省略该特定优化,从而导致发出不同的代码。

有很多类似的情况,所以你可能会投入大量精力去做一些不可行的事情。无论如何,为什么你需要DLL按位相同?

答案 1 :(得分:0)

你是否运行相同版本的链工具(编译器,链接器......),包括32/64位差异?

答案 2 :(得分:0)

Windows Server 2008是唯一运行64位的计算机吗?如果是,那可能是你的问题。