Solaris cc是否为不同的编译嵌入了可执行文件的不同信息?

时间:2009-11-02 15:56:43

标签: c compiler-construction solaris binary-reproducibility

天儿真好,

以前曾经问过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嵌入可执行文件中的含义是什么?时间戳?

编辑:正如Chris建议的那样剥离可执行文件会使diff报告两个可执行文件完全相同。

欢呼声,

2 个答案:

答案 0 :(得分:2)

如果你在两个二进制文件上使用“od -c”,然后使用并排差异程序,你就可以知道差异是什么。在我调查Sun编译器的过去,它通常是一个日期字符串。您还可以尝试剥离可执行文件,以查看是否删除了具有差异的ELF部分。

答案 1 :(得分:1)

如果您使用完全相同的源代码并使用Sun的编译器对其进行两次编译,则将获得两个完全二进制重复的文件。会有细微的差别。据我所知,它主要归结为日期/时间问题。