Почему сборка одного и того же проекта генерирует разные EXE-файлы для каждого разработчика - PullRequest
12 голосов
/ 15 января 2010

Моя команда и я разрабатываем проект VC ++ 6. Мы все используем одну и ту же базу кода (используя систему контроля версий), и все наши настройки компилятора / компоновщика / среды (включая порядок включения каталогов), насколько мы можем судить, абсолютно одинаковы. Конечно, мы используем ту же версию VC ++ с теми же пакетами обновлений (VC6 SP6).

Проблема в том, что EXE-файл, который каждый из нас создает, немного отличается.

Я знаю, что каждый раз, когда вы создаете EXE на одном и том же компьютере, в файле есть 3 места, где компоновщик хранит метку времени. Я не говорю об этих различиях.

Хотя наши EXE-файлы имеют одинаковую длину, при сравнении EXE-файлов есть тысячи байтов, которые отличаются. Многие из этих байтов отличаются на 0x20 по значению.

Есть идеи, в чем может быть причина?

Редактировать: Отладочная сборка (На самом деле, мы не проверяли релиз).

Редактировать: Различия в двоичных разделах, а не в текстовых строках.

Редактировать: Все разработчики используют одинаковые имена дисков / папок для источника и для продуктов.

Ответы [ 5 ]

5 голосов
/ 15 января 2010

Если в версии Debug включена опция «Инкрементная ссылка», то, возможно, это и является причиной различий.

4 голосов
/ 15 января 2010

Поскольку 0x20 - это разница между символами ASCII в верхнем и нижнем регистре, мне интересно, если эти различия происходят в путях к файлам, которые компилятор / компоновщик вставляет в двоичный файл (возможно, утверждают сообщения?)Могут ли ваши деревья разработки отличаться («C: \ DevTrees \ MyProject \ SuperFoo» в одном блоке и «E: \ work \ projects \ superfoo» в другом?).

3 голосов
/ 15 января 2010

Я согласен с тем, что говорит NickD. Во время отладки происходит инкрементное связывание, которое не перестраивает exe с нуля, но добавляет / вставляет / удаляет код здесь и там для каждой сборки.

т.е. схема exe зависит от каждой компиляции, начиная с первой.

Чистая сборка должна давать идентичные результаты на идентичных компиляторах.

1 голос
/ 15 января 2010

Это может быть совпадением, но 0x20 - это разница между значениями символов ASCII нижнего и верхнего регистров (например, 'A' == 65 == 0x41, 'a' == 97 = 0x61).

0 голосов
/ 15 января 2010

Просто предположение: неинициализированные части строк или свойства строк определенной длины, где # 0 не в конце?

...