2009-11-02 26 views
0

我使用C開發了一個Windows命令行工具,並使用VC++編譯它,有時返回並檢入源代碼。在檢入之前,我清理了項目,刪除了除了其他人之外的.exe,.obj文件。我仍然繼續使用命令行工具。重新編譯相同的代碼會在VC++中產生不同的可執行文件

幾個月後,我檢出了源,再次編譯,但生成的EXE與先前編譯的版本不匹配。

我的問題,

是否由VC生成的可執行++與重新編譯改變? 或我錯過了什麼?

+1

正如Mark Rushakoff指出的那樣,這是一個確切的重複:http://stackoverflow.com/questions/1363217/binary-reproducibility-in-visual-c – 2009-11-02 04:13:35

+1

也相關:http://stackoverflow.com/questions/1426333 /可重放-MD5-SHA1-ON-A-重建-的-C-EXE – 2009-11-02 04:14:28

回答

6

查看this question的答案,無法每次都強制VS輸出相同的二進制文件。編譯器將一些元數據(例如時間戳)嵌入到可執行文件中,這就是編譯之間二進制文件不相同的原因。

一個問題的答案也有掛this MSDN blog post的,其中規定:

...編譯器編寫者都遠遠更感興趣的是產生正常的代碼和生成它速度快於確保無論是生成的佈局在您的硬盤上完全相同。由於優化代碼的方法和實現有很多種,所以總有可能一個構建以更多的時間完成某些與另一個構建相比或不同的東西。因此,對於同樣的功能,最終的結果可能是一組不同的位。

所以,你的答案是肯定的,二進制文件不是位對位相同,但他們應該功能相同。

相關問題