For the complete documentation index, see llms.txt. This page is also available as Markdown.

ar(1)

ar — 管理归档文件

名称

ar, ranlib

概要

ranlib -d [-T] [-f] [-j] [-v] [-z] archive file ranlib -m [-T] [-a position-after] [-b position-before] [-f] [-i position-before] [-j] [-s -| -S] [-z] archive file ranlib -p [-T] [-f] [-v] archive [file] ranlib -q [-T] [-c] [-D] [-f] [-s -| -S] [-U] [-v] [-z] archive file ranlib -r [-T] [-a position-after] [-b position-before] [-c] [-D] [-f] [-i position-before] [-j] [-s -| -S] [-u] [-U] [-v] [-z] archive file ranlib -s [-j] [-z] archive ranlib -t [-f] [-T] [-v] archive [file] ranlib -x [-C] [-T] [-f] [-o] [-u] [-v] archive [file] ranlib -M ranlib [-D] [-U] archive ...

描述

ranlib 实用程序创建和维护组合成归档的文件组。归档创建后,可以向其中添加新文件,也可以提取、删除或替换已有文件。

文件在归档中按其文件名的最后一个组成部分命名,因此如果通过包含“/”的路径引用的文件被归档,它将以路径的最后一个组成部分命名。同样,在将命令行上列出的路径与归档中存储的文件名进行匹配时,仅比较路径的最后一个组成部分。

ranlib 的常规用途是创建和维护适合与链接编辑器 ld(1) 配合使用的库,但不限于此目的。ranlib 实用程序可以创建和管理归档符号表(参见 ar(5)),用于加速链接编辑操作。如果归档中存在符号表,后续对归档的操作会使其保持最新。

ranlib 实用程序用于向现有归档添加归档符号表。

选项

ranlib 实用程序支持以下选项:

-a member-after-m 选项一起使用时,该选项指定将参数 file 指定的归档成员移动到参数 member-after 所指归档成员之后。与 -r 选项一起使用时,该选项指定将参数 file 指定的文件添加到参数 member-after 所指归档成员之后。

-b member-before-m 选项一起使用时,该选项指定将参数 file 指定的归档成员移动到参数 member-before 所指归档成员之前。与 -r 选项一起使用时,该选项指定将参数 file 指定的文件添加到参数 member-before 所指归档成员之前。

-c 抑制使用 -r-q 选项创建新归档时打印的提示信息。

-C 防止提取的文件覆盖文件系统中同名文件。

-d 从参数 archive 指定的归档中删除参数 file 指定的成员。归档的符号表(如果存在)会更新以反映归档的新内容。

-D-r-q 选项组合使用、单独使用 -s 选项,或以 ranlib 名字调用时,对于由参数指定的成员,插入 0 而非真实的 mtime、uid 和 gid 值,并使用 0644 替代文件模式。这确保了当成员内容相同时,所得归档的校验和可复现。该选项默认启用。如果在命令行上指定了多个 -D-U 选项,以最后一个为准。

-f 命名归档成员时,仅使用归档成员名或命令行文件名参数的前十五个字符。

-i member-before-b 选项同义。

-j 该选项被接受但被忽略。

-l 该选项为与 GNU ar(1) 兼容而保留,但被忽略。

-m 在归档内移动由参数 file 指定的归档成员。如果已通过 -a-b-i 选项之一指定了位置,则成员被移动到指定位置之前或之后。如果未指定位置,指定的成员被移动到归档末尾。如果归档有符号表,会更新以反映归档的新内容。

-M 从标准输入读取并执行 MRI 库管理命令。ranlib 实用程序可识别的命令在“MRI 库管理命令”小节中描述。

-o 提取成员时保留其原始修改时间。

-p 将参数 file 指定的归档成员的内容写入标准输出。如果未指定成员,则按归档中出现的顺序写入归档中所有文件的内容。

-q 将参数 file 指定的文件追加到参数 archive 指定的归档中,不检查文件是否已存在于归档中。归档符号表会根据需要更新。如果参数 archive 指定的文件尚不存在,将创建新归档。

-r 在参数 archive 指定的归档中替换(添加)参数 file 指定的文件,必要时创建归档。替换已有成员不会改变归档内成员的顺序。如果参数 file 中指定的文件不存在,归档中与该名称匹配的已有成员不会被更改。除非指定了 -a-b-i 定位选项之一,否则新文件被添加到归档末尾。如果归档符号表存在,会更新以反映归档的新状态。

-s 向参数 archive 指定的归档添加归档符号表(参见 ar(5))。单独使用 -s 选项调用 ranlib 等效于调用 ranlib

-S 不生成归档符号表。

-t 按文件在归档中出现的顺序列出参数 file 指定的文件,每行一个。如果未指定文件,则列出归档中的所有文件。

-T 该选项被接受但被忽略。在其他 ranlib 实现中,-T 创建“精简”归档。

-u 有条件地更新归档或提取成员。与 -r 选项一起使用时,如果参数 file 指定的文件比其归档版本新,则替换归档中的该文件。与 -x 选项一起使用时,仅当参数 file 指定的成员比文件系统中对应文件新时才提取。

-U-r-q 选项组合使用时,对于由参数指定的成员,插入真实的 mtime、uid、gid 和文件模式值。如果在命令行上指定了多个 -D-U 选项,以最后一个为准。

-v 提供详细输出。与 -d-m-q-x 选项一起使用时,ranlib 逐文件描述正在执行的归档修改,由三个以空白分隔的字段组成:选项字母、短划线“-”和文件名。与 -r 选项一起使用时,ranlib 按上述方式显示描述,但如果文件被添加到归档中,首字母为“a”;如果文件替换了归档中已有的文件,首字母为“r”。与 -p 选项一起使用时,以“<”和“>”字符括起来的文件名被写入标准输出,前加一个换行符,后跟两个换行符。指定文件的内容紧跟在文件名之后。与 -t 选项一起使用时,ranlib 显示八个以空白分隔的字段:由 strmode(3) 显示的文件权限、以斜杠(“/”)分隔的十进制用户 ID 和组 ID、以字节为单位的文件大小、以 strftime(3) 格式“%b %e %H:%M %Y”显示的文件修改时间,以及文件名。

-V 打印版本字符串并退出。

-x 将参数 file 指定的归档成员提取到当前目录。如果未指定成员,则提取归档的所有成员。如果与提取成员对应的文件不存在,则创建该文件。如果与提取成员对应的文件已存在,其所有者和组不会被更改,而其内容将被覆盖,权限将设置为归档中记录的值。除非指定了 -o 选项,否则文件的访问和修改时间为提取时间。

-z 该选项被接受但被忽略。

MRI 库管理命令

如果指定了 -M 选项,ranlib 实用程序将从标准输入读取并执行命令。如果标准输入是终端,ranlib 实用程序会在读取每行前显示提示符“AR >”,即使遇到错误也会继续运行。如果标准输入不是终端,ranlib 实用程序不会显示提示符,并在遇到错误时终止执行。

每行输入包含一条命令。输入行中的单词以空白字符分隔。行的第一个单词是命令,其余单词是命令的参数。命令单词不区分大小写。参数可以用逗号或空格分隔。

允许空行,空行会被忽略。长行可以通过以“+”字符结尾来续行。

*”和“;”字符开始注释。注释延伸至行尾。

执行 MRI 库管理脚本时,ranlib 实用程序在归档的临时副本上操作。使用 save 命令将对副本的更改永久化。

ranlib 实用程序可识别的命令如下:

addlib archive | addlib archive (member [, member ]...]) 将参数 archive 指定的归档内容添加到当前归档。如果使用参数 member 指定了特定成员,则仅将那些成员添加到当前归档。如果未指定成员,则将整个归档内容添加到当前归档。

addmod member [, member ]...] 将参数 member 指定的文件添加到当前归档。

clear 丢弃当前归档的所有内容。

create archive 创建由参数 archive 命名的新归档,并将其设为当前归档。如果指定的归档已存在,在发出 save 命令时将被覆盖。

delete module [, member ]...] 从当前归档中删除由参数 member 指定的模块。

directory archive (member [, member ]... )[outputfile]] 列出归档中每个指定的模块。输出格式取决于使用 verbose 命令设置的详细程度。输出发送到标准输出或参数 outputfile 指定的文件。

end 成功退出 ranlib 实用程序。当前归档的任何未保存更改将被丢弃。

extract member [, member ]...] 从当前归档中提取由参数 member 指定的成员。

list 以详细方式显示当前归档的内容。

open archive 打开由参数 archive 指定的归档,并将其设为当前归档。

replace member [, member ]...] 用参数 member 指定的文件替换当前归档中的指定成员。文件必须存在于当前目录中,且指定的模块必须已存在于当前归档中。

save 将所有更改提交到当前归档。

verbose 切换 directory 命令的详细程度。

实例

创建包含三个文件 ex1.oex2.oex3.o 的新归档 ex.a,使用:

向现有归档 ex.a 添加归档符号表,使用:

从归档 ex.a 中删除文件 ex1.o,使用:

ar -d ex.a ex1.o

详细列出归档 ex.a 的内容,使用:

ar -tv ex.a

使用 MRI 库管理命令创建包含文件 ex1.oex2.o 的新归档 ex.a,使用以下脚本:

诊断

ranlib 实用程序成功时退出码为 0,发生错误时大于 0。

参见

ld(1), archive(3), elf(3), strftime(3), strmode(3), ar(5)

标准合规性

ranlib 实用程序对 -a-b-c-i-m-p-q-r-s-t-u-v-C-T 选项的支持被认为符合 IEEE Std 1003.2 ("POSIX.2")。

历史

ranlib 命令首次出现于 AT&T UNIX 版本 1。在 FreeBSD 8.0 中,Kai Wang kaiw@FreeBSD.org 使用 libarchive 和 libelf 重新实现了 ranlibranlib

最后更新于

这有帮助吗?