ar 中的 "rcs" 选项有什么作用?

What does the "rcs" option in ar do?

我确实阅读了 man 文件,但没有帮助。 rcs 似乎是传递给 ar 的最受欢迎的选项,但我不太清楚其含义。

那么c就是新建一个存档,那为什么要用r呢?哪个似乎代表“替换”? s 选项对输出有何影响?

这意味着"Insert the files member... into archive (with replacement)."

阅读 manual page(对于 ar)是一个好的开始:

c

Create the archive. The specified archive is always created if it did not exist, when you request an update. But a warning is issued unless you specify in advance that you expect to create it, by using this modifier.

r

Insert the files member... into archive (with replacement). This operation differs from q in that any previously existing members are deleted if their names match those being added.

s

Write an object-file index into the archive, or update an existing one, even if no other change is made to the archive. You may use this modifier flag either with any operation, or alone. Running "ar s" on an archive is equivalent to running ranlib on it.

POSIX相比,您可能会注意到一个区别:GNU ar 使“-”前缀选项本身成为可选的。

存档可以包含目标文件以外的其他项目(尽管这种情况并不经常发生)。包含目标文件的存档需要额外的维护(例如,由 ranlib 完成)以使链接器可以使用它们。

根据 Rationale in POSIX ar,-s 选项起源于 BSD(System V did 这个是自动的)。然而, 运行ning ranlib 本身就是普遍的做法(-s 很少使用)。有趣的是,POSIX 没有 ranlib,最终 -s 选项将替换大量写入 运行 的 makefile 中的 ranlib平台数量。

阅读 ar 的手册会有所帮助,但我会更详细地解释它。 ar -rcs 是您在使用 Makefile 编译库时最可能使用的命令。 r 表示如果库已经存在,则用新文件替换库中的旧文件。 c 表示库不存在则创建。 s 可以看成是 'sort' 库的(创建一个排序索引),这样它会被索引并且更快地访问库中的函数。 因此,rcs可以看成是replace, create, sort.