在不同系统上构建相同

ppi*_*icz 6 c++ compiler-construction dll linker visual-studio-2005

我有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.以功能订单文件为输入.任何人都知道该文件应该是什么样的?

小智 7

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

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

  • 优化的事情只是一个例子 - 有很多东西可能会使编译器产生不同的输出. (2认同)