Makefile 使用make在不同时间编译时,什么可能会导致二进制文件略有不同?

Makefile 使用make在不同时间编译时,什么可能会导致二进制文件略有不同?,makefile,binaries,Makefile,Binaries,我使用make工具编译了代码,并得到了二进制文件 我再次编译了代码,在makefile中做了一些更改(-j在某些地方插入),并在二进制文件中得到了一些细微的差别。“无法比较”报告了这种差异。为了进一步检查,我再次编译了代码,没有在makefile中做任何更改,发现二进制文件仍然不同 为什么在不同的时间编译相同的代码会产生稍微不同(大小和内容)的二进制文件?如何检查我所做的更改是否合法,以及二进制文件在逻辑上是否相同 请再问我进一步解释。 你没有说过你正在构建什么(C,C++等),但是如果是时间戳

我使用make工具编译了代码,并得到了二进制文件

我再次编译了代码,在makefile中做了一些更改(
-j
在某些地方插入),并在二进制文件中得到了一些细微的差别。“无法比较”报告了这种差异。为了进一步检查,我再次编译了代码,没有在makefile中做任何更改,发现二进制文件仍然不同

为什么在不同的时间编译相同的代码会产生稍微不同(大小和内容)的二进制文件?如何检查我所做的更改是否合法,以及二进制文件在逻辑上是否相同


<>请再问我进一步解释。

你没有说过你正在构建什么(C,C++等),但是如果是时间戳,我不会感到惊讶。 您可以找到正在构建的二进制类型的格式(这将取决于您的操作系统),并查看在正在更改的位置设置时间戳是否有意义


在生成非常小的二进制文件的小型示例程序上执行此操作可能是最容易的,以便更容易地计算出所有内容的含义。

ELF对象文件包含编译时的时间戳。因此,每次编译(在Linux或Solaris上)时,您可能会看到一个不同的对象文件。您也可以在其他目标文件系统中找到相同的结果。

您的构建系统是否生成源代码?它会在生成的代码中添加时间戳或类似UUID的随机字符串/数字吗?嘿!!谢谢你的回复。你能指导我如何检查我所做的更改是否有效吗!!!我编译并检查了带有更改的代码,没有错误。但我的导师让我检查二进制文件是否有任何差异。我在makefile的某些地方使用了-j,现在执行速度更快了@ankit:make过程中的
-j
会加快构建速度,但不会影响目标代码,只是目标文件中的时间戳会比没有时间戳时更紧密。(选项
-j
对我所知道的任何C编译器都没有标准意义。)当你说“我所做的更改是否有效”时,你希望看到什么?输出是否与预期不同?那么是的,他们在工作。输出是否比以前更快(或更慢)?那么这些变化就会产生影响。文件大小和校验和是否不同?然后二进制文件发生了变化。@ankit:还有-你在哪个平台上工作?在问题中提到这一点通常是有帮助的。嘿!!谢谢你的回复。你能指导我如何检查我所做的更改是否有效吗!!!我编译并检查了带有更改的代码,没有错误。但我的导师让我检查二进制文件是否有任何差异。我在makefile的某些地方使用了-j,现在执行速度更快了!!