Подтвердить что ты не робот

Почему создание одного и того же проекта генерирует различные EXE файлы для каждого разработчика

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

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

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

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

Любая идея, что может быть причиной?

Edit: Debug build (На самом деле мы не проверяли выпуск).

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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