我有一个生成二进制文件的Makefile,问题是在Cygwin和Linux环境上生成的相同二进制文件的CRC值不同。会是什么原因。
环境:Cygwin 64 位 Linux 64 位
CRC 发生变化,因为可执行文件的内容发生了变化。内容可能发生变化的原因有很多,但对您来说最主要的原因是 Windows 使用
PE32+
(如果您使用的是 32 位机器,则为 PE32
)格式,而 linux 使用 ELF
格式(macos 使用 March-O
)
)。它们的标头和内容不同,因此它们的 CRC 也会不同。
有时,在具有相同操作系统的两台不同机器上构建的二进制文件也会有所不同。原因是库路径不同,或者一台机器得到 clang 12,另一台机器得到 clang 15。
生成的文件也不是 C 二进制文件,而是可执行文件。二进制文件只是机器代码(以及 const 值的一些数据),没有其他信息,因此操作系统将无法运行它(它不知道动态链接到的库、入口位置。 ..).