1

天,

之前有人问过 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 将两个可执行文件报告为相同。

干杯,

4

2 回答 2

2

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

于 2009-11-02T21:59:52.200 回答
1

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

于 2009-11-06T03:13:14.397 回答