Встраивает ли Solaris cc различную информацию в исполняемый файл для разных компиляций?

G'day,

Это было задано ранее для VC++, но мне интересен ответ для Solaris.

Я компилирую и связываю следующий тривиальный код C:

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return 0;
}

используя команду:

cc -o hello1 hello.c

и сделать это пару раз, чтобы получить исполняемые файлы hello2 и hello3. Это делается на одной машине с одним и тем же компилятором и в одном и том же каталоге в разное время.

Размеры исполняемых файлов одинаковы, но diff сообщает, что двоичные файлы различаются, а cmp -l сходит с ума с длинным списком разных мест.

Кто-нибудь знает, что cc встраивает в исполняемые файлы, чтобы они отличались? Timestamps?

Редактировать: Удаление исполняемых файлов, как предложил Крис ниже, заставляет diff сообщать о двух исполняемых файлах как идентичных.

веселит,

2 ответа

Решение

Если вы используете "od -c" в двух двоичных файлах, а затем используете программу сравнения "рядом", вы можете понять, в чем различия. В прошлом, когда я исследовал компиляторы Sun, обычно это строка даты. Вы также можете попробовать удалить исполняемый файл, чтобы увидеть, удаляет ли это раздел ELF, в котором есть разница.

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

Другие вопросы по тегам