代码之家  ›  专栏  ›  技术社区  ›  zerocool

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

  •  2
  • zerocool  · 技术社区  · 6 年前

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

    here

    在您可以提供给的选项中 兰利布 -D -U

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

    他们是这么说的:

    -D
    

    在确定性模式下运行。symbol map archive members标头将为UID、GID和时间戳显示零。使用此选项时,多次运行将生成相同的输出文件。 如果binutils配置为--enable deterministic archives,

    有谁能简单解释一下这两个选项 兰利布 (-D和-U)

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

    1 回复  |  直到 6 年前
        1
  •  6
  •   MadScientist    6 年前

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

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

    不用说,这在许多工具中都是一项巨大的工作,并且假设您使用的是编译器、运行库等的预定义版本。

    POSIX存档库格式(格式为 libfoo.a 文件)基本上是对象文件的集合,再加上目录。默认情况下,目录包含每个对象文件的时间戳、用户ID和组ID。在 利福。一 文件使其具有非确定性,因此不是逐字节相同的。

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

    请注意,如果您使用 -D 具有的选项 ranlib 你会打破惯例的 library updating feature ,它依赖于从库存档中检查对象文件的时间戳。