бинарный объектный файл меняется в каждой сборке - PullRequest
5 голосов
/ 10 ноября 2010

При компиляции с использованием компилятора G ++ GNU каждый раз, когда я делаю сборку, без изменения исходного кода я получаю другой двоичный объектный файл.Есть ли опция компиляции, которая будет давать мне один и тот же двоичный файл каждый раз.

Ответы [ 2 ]

10 голосов
/ 10 ноября 2010

Скопировано с man-страницы GCC:

-frandom семян = строка
Эта опция предоставляет начальное число, которое GCC использует, когда это было бы иначе использовать случайные числа. это используется для генерации определенных имен символов, которые должны быть разными в каждом скомпилированном файле. Это также используется для размещения уникальных штампов в файлах данных покрытия и объектные файлы, которые производят их. Вы можете использовать опцию -frandom-seed для создания воспроизводимых идентичных объектных файлов.

Строка должна отличаться для каждого файла, который вы компилируете.

0 голосов
/ 10 ноября 2010

Вам лучше использовать make. Таким образом, если ваш источник не изменился, компиляция будет пропущена, поэтому объектные файлы не будут изменены.

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

Пример makefile:

all: source

source: source.i.cpp
    @cmp -s source.i.cpp source.i.prev || g++ source.i.cpp -o source
    @touch source
    @cp source.i.cpp source.i.prev

source.i.cpp: source.cpp
    @g++ -E source.cpp >source.i.cpp

Обратите внимание, что время выполнения исполняемого файла изменено, а содержимое - нет (если вы изменили только комментарии, а не фактический код).

...