gpt4 book ai didi

unix - gnu 实用程序中 ranlib 中的确定性模式

转载 作者:行者123 更新时间:2023-12-02 17:11:07 25 4
gpt4 key购买 nike

我正在阅读有关更新索引或生成存档内容索引的 ranlib

here

在您可以提供给 ranlib 的选项中有 -D-U

我读了定义,但我无法理解:

他们是这样说的:

-D

以确定性模式运行。符号映射存档成员的 header 将 UID、GID 和时间戳显示为零。使用此选项时,多次运行将产生相同的输出文件。如果 binutils 配置了 --enable-deterministic-archives,

任何人都可以为 ranlib 提供这两个选项的简单解释吗(-D 和 -U)

为什么有人需要使用这个选项?

最佳答案

许多发行版都在努力使从源代码到二进制的所有软件构建都具有“确定性”,这意味着在这种情况下,无论谁执行构建或何时执行构建,您得到的二进制文件都将是与其他任何人的构建逐字节相同。

目标是允许通过校验和验证二进制文件,以验证签名等。

不用说,这是跨许多工具的大量工作,并且假设您使用的是预定义版本的编译器、运行时库等。

POSIX 归档库格式(libfoo.a 文件的格式)基本上是目标文件的集合,加上目录。默认情况下,目录包含每个目标文件的时间戳、用户 ID 和组 ID。显然,在 libfoo.a 文件中保留此信息使其具有不确定性,因此不会逐字节相同。

因此,对于关心确定性构建的人,他们应该使用 -D 选项,该选项将 0 写入这些字段而不是实际值。对于不关心确定性构建的人,他们应该使用使用真实值的 -U 选项。

请注意,如果您将-D 选项与ranlib 一起使用,您将破坏make 的library updating feature。 ,它依赖于检查库存档内部目标文件的时间戳。

关于unix - gnu 实用程序中 ranlib 中的确定性模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49211308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com