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

时间:2018-03-10 16:19:15

标签: unix makefile gnu archive ar

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

here

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

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

这就是他们所说的:

-D

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

任何人都可以对ranlib这两个选项做一个简单的解释 (-D和-U)

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

1 个答案:

答案 0 :(得分:2)

许多发行版都在努力将所有软件构建从源代码转换为二进制代码" deterministic",这意味着在这种情况下,无论谁执行构建或何时执行构建,二进制文件你得到的将是逐字节的,与其他任何人的构建相同。

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

毋庸置疑,这是许多工具的大量工作,并假设您正在使用预定义版本的编译器,运行时库等。

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

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

请注意,如果您将-D选项与ranlib一起使用,则会打破制作library updating feature,这依赖于检查内部对象文件的时间戳图书馆档案。