我正在阅读更新索引的ranlib
或生成档案内容索引
在您可以提供给ranlib
的选项中-D
和-U
我读了这个定义,但我无法理解:
这就是他们所说的:
-D
在确定性模式下操作。符号映射存档成员的标题将为UID,GID和时间戳显示零。使用此选项时,多次运行将生成相同的输出文件。 如果binutils配置了--enable-deterministic-archives,
任何人都可以对ranlib
这两个选项做一个简单的解释
(-D和-U)
为什么有人需要使用此选项?
答案 0 :(得分:2)
许多发行版都在努力将所有软件构建从源代码转换为二进制代码" deterministic",这意味着在这种情况下,无论谁执行构建或何时执行构建,二进制文件你得到的将是逐字节的,与其他任何人的构建相同。
目标是允许通过校验和验证二进制文件,以验证签名等。
毋庸置疑,这是许多工具的大量工作,并假设您正在使用预定义版本的编译器,运行时库等。
POSIX归档库格式(libfoo.a
文件的格式)基本上是目标文件的集合,加上目录。默认情况下,目录包含每个目标文件的时间戳,用户ID和组ID。显然在libfoo.a
文件中保留此信息会使其不确定,因此不会逐字节相同。
因此,对于关心确定性构建的人,他们应该使用-D
选项,将0写入这些字段而不是实际值。对于不关心确定性构建的人,他们应该使用使用实际值的-U
选项。
请注意,如果您将-D
选项与ranlib
一起使用,则会打破制作library updating feature,这依赖于检查内部对象文件的时间戳图书馆档案。