Встраивает ли 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, вы не получите два точно двоичных файла-дубликата. Там будут небольшие отличия. Насколько я знаю, это в основном сводится к проблемам даты / времени.