我有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。以功能订单文件为输入。任何人都知道该文件应该是什么样的?
答案 0 :(得分:7)
您可能认为编译纯粹是确定性的(相同的输入每次都提供相同的输出)但不一定是这种情况。例如,考虑优化器 - 这将需要一些内存来工作,可能更多的更高优化方法。如果在一台机器上内存分配失败(因为机器内存较少),那么编译器可以省略该特定优化,从而导致发出不同的代码。
有很多类似的情况,所以你可能会投入大量精力去做一些不可行的事情。无论如何,为什么你需要DLL按位相同?
答案 1 :(得分:0)
你是否运行相同版本的链工具(编译器,链接器......),包括32/64位差异?
答案 2 :(得分:0)
Windows Server 2008是唯一运行64位的计算机吗?如果是,那可能是你的问题。