Перекомпиляция одного и того же кода создает другой исполняемый файл в VC ++ - PullRequest
0 голосов
/ 02 ноября 2009

Я разработал инструмент командной строки Windows, используя C, и скомпилировал его в VC ++, иногда обратно и зарегистрировал исходный код. Я очистил проект перед регистрацией, который удалил файлы .exe, .obj помимо других. Я продолжал использовать инструмент командной строки, хотя.

Через пару месяцев я проверил исходный код, скомпилированный снова, но сгенерированный EXE-файл не совпадает с предыдущей скомпилированной версией.

Мой вопрос,

Изменяется ли исполняемый VC ++ исполняемый файл при перекомпиляции? Или я что-то упустил?

1 Ответ

7 голосов
/ 02 ноября 2009

Глядя на ответы в этом вопросе , невозможно заставить VS выдавать один и тот же двоичный файл каждый раз. Компилятор встраивает некоторые метаданные, такие как отметка времени, в исполняемый файл, поэтому двоичные файлы не совпадают между компиляциями.

Один из ответов там также связан с этим сообщением в блоге MSDN , в котором говорится:

... авторы компиляторов гораздо больше заинтересованы в создании правильно функционирующего кода и его быстрой генерации, чем в том, чтобы все, что генерируется, было одинаково размещено на вашем жестком диске. Из-за многочисленных и разнообразных методов и реализаций для оптимизации кода всегда возможно, что одна сборка закончилась немного большим количеством времени, чтобы сделать что-то дополнительное или отличное от другой сборки. Таким образом, конечный результат может быть другим набором битов для той же функциональности.

Итак, ваш ответ - да, двоичные файлы не являются бит-битными идентичными, но они должны быть функционально идентичными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...