【发布时间】:2023-03-22 22:43:01
【问题描述】:
我确实阅读了 man 文件,但没有帮助。 rcs 似乎是最流行的传递给 ar 的选项,但我的意思不是很清楚。
所以c 的意思是创建一个新的存档,但是为什么要使用r?这似乎代表“替换”? s 选项会对输出做什么?
【问题讨论】:
标签: c gcc static-libraries static-linking unix-ar
我确实阅读了 man 文件,但没有帮助。 rcs 似乎是最流行的传递给 ar 的选项,但我的意思不是很清楚。
所以c 的意思是创建一个新的存档,但是为什么要使用r?这似乎代表“替换”? s 选项会对输出做什么?
【问题讨论】:
标签: c gcc static-libraries static-linking unix-ar
阅读ar 的手册会有所帮助,但我会更详细地解释它。
ar -rcs 是您在使用 Makefile 编译库时最可能使用的命令。
r 表示如果库已经存在,请将库中的旧文件替换为新文件。
c 表示如果库不存在则创建它。
s 可以看作是对库进行“排序”(创建排序索引),以便对其进行索引并更快地访问库中的函数。
因此,rcs 可以看作是指replace, create, sort。
【讨论】:
阅读manual page (for ar) 是一个好的开始:
c
创建存档。如果指定的存档总是被创建 不存在,当您请求更新时。但是会发出警告 除非您事先指定您希望创建它,否则 使用这个修饰符。
r
将文件成员...插入存档(带替换)。这 操作与 q 的不同之处在于任何先前存在的成员 如果他们的名字与被添加的名字匹配,就会被删除。
s
将目标文件索引写入存档,或更新现有的 一,即使没有对档案进行其他更改。您可以使用 此修饰符标志可以与任何操作一起使用,也可以单独使用。在档案上运行“
ar s”相当于在档案上运行ranlib。
与POSIX 相比,您可能会注意到一个区别:GNU ar 使“-”前缀选项本身是可选的。
一个档案可以包含除目标文件之外的其他项目(尽管这并不经常这样做)。包含目标文件的档案需要额外的维护(例如,由 ranlib 完成)以使它们可供链接器使用。
根据 POSIX ar 中的 Rationale,-s 选项起源于 BSD(System V 自动这样做了)。然而,运行ranlib 本身是流行的做法(-s 很少使用)。有趣的是,POSIX 没有ranlib,最终-s 选项将替换大量编写以在各种平台上运行的makefile 中的ranlib。
【讨论】:
这意味着“将文件成员...插入存档(带替换)。”
【讨论】: