我使用 make 实用程序编译了我的代码并获得了二进制文件。
我再次编译了代码,对 makefile 进行了一些更改(-j
在某些点插入),并且在二进制文件中略有不同。差异由“超越比较”报告。为了进一步检查,我再次编译了代码,没有更改 makefile,发现二进制文件仍然不同。
为什么在不同时间编译的相同代码会导致生成略有不同(大小和内容)的二进制文件?如果检查我所做的更改是否合法并且二进制文件在逻辑上是否相同,应该如何检查?
请向我寻求任何进一步的解释。
您还没有说您正在构建什么(C、C++ 等),但如果它是时间戳,我不会感到惊讶。
您可以找出您正在构建的二进制类型的格式(这将取决于您的操作系统),并查看在发生变化的地方存在时间戳是否有意义。
在一个很小的示例程序上执行此操作可能是最简单的,该示例程序将生成一个非常小的二进制文件,以便更容易地计算出所有内容的含义。
ELF 目标文件包含编译时的时间戳。因此,每次编译(在 Linux 或 Solaris 上)时,您都可以期待不同的目标文件。您也可能会发现其他系统的目标文件也是如此。