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

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

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

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

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

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

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

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

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


person Lior Kogan    schedule 15.01.2010    source источник
comment
Я предполагаю, что вы спрашиваете о выпускной версии, верно?   -  person Nick Dandoulakis    schedule 15.01.2010


Ответы (5)


Если в версии Debug установлен флажок "Добавлять инкрементально", то, вероятно, это причина различий.

person Nick Dandoulakis    schedule 15.01.2010
comment
это просто предположение. Пошаговое связывание добавляет некоторую отладочную информацию каждый раз, когда вы строите проект. Он не создает чистый exe. - person Nick Dandoulakis; 15.01.2010
comment
В воскресенье проверю. Спасибо. - person Lior Kogan; 15.01.2010
comment
Д: Спасибо! Rebuild All от всех разработчиков сгенерировал один и тот же EXE (за исключением разницы во времени). - person Lior Kogan; 17.01.2010
comment
@Lior, да, Rebuild All создает чистый EXE. Я должен был упомянуть об этом. Так вот в чем действительно была проблема? Я рад, что смог помочь. Ваше здоровье. - person Nick Dandoulakis; 18.01.2010

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

person Michael Burr    schedule 15.01.2010

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

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

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

person Macke    schedule 15.01.2010

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

person AakashM    schedule 15.01.2010

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

person Edelcom    schedule 15.01.2010