【发布时间】:2021-04-01 15:28:39
【问题描述】:
Nixos binary caches 的想法让我想到了这个问题。
在 nix 中,每个编译的二进制文件都与一个散列键相关联,该散列键是通过散列所有依赖项和构建脚本获得的,即 nix-speak 中的“派生”。无论如何,这是我的理解。
但是当在不同的机器上编译时,相同的派生不会导致不同的二进制文件吗? 如果机器 A 的处理器的指令集与机器 B 的处理器稍有不同,并且编译器考虑了这种不同的指令集,那么在机器 A 上编译推导生成的二进制文件与在机器 A 上编译推导生成的二进制文件是否有区别? B机?如果是这样,那么不同的二进制文件就不能具有相同的派生,从而具有相同的 nix 哈希吗?
在具有不同指令集的机器上构建的相同派生是否总是产生相同的二进制文件?
【问题讨论】:
-
运行编译器的机器上的指令集与编译器输出无关。事实上,交叉编译器在输出根本无法在构建机器上运行的情况下很常见。通常,构建在不同系统上的二进制文件之间唯一不同的是二进制文件中的时间戳。