GNU ar程序创建 ,修改和从档案中提取。 一个档案是一个单独的文件 ,其中包含一个结构中的其他文件的集合,可以检索原始单个文件(称为存档的成员 )。
概观
原始文件的内容,模式(权限),时间戳,所有者和组保存在存档中,并可在提取时恢复。
GNU ar可以维护其成员具有任意长度名称的档案; 然而,取决于系统上如何配置ar ,为了与其他工具维护的存档格式兼容,可能会限制成员名称长度。 如果存在,限制通常为15个字符(与a.out相关的格式的典型值)或16个字符(与coff相关的格式的典型值)。
ar被认为是一个二进制实用程序,因为这种类型的档案最常用作包含常用子程序的库 。
当您指定修饰符时, ar为归档中的可重定位对象模块中定义的符号创建索引。 一旦创建,只要ar对其内容进行更改(保存为q更新操作),该索引就会在归档中更新。 具有这种索引的存档加快了与库的链接,并且允许库中的例程彼此调用而不考虑它们在存档中的位置。
您可以使用nm -s或nm -print-armap列出此索引表。 如果存档文件缺少表格,则可以使用称为ranlib的另一种形式来添加表格。
GNU ar被设计为与两个不同的设施兼容。 您可以使用命令行选项来控制其活动,例如Unix系统上不同类型的ar ; 或者,如果您指定单个命令行选项-M ,则可以使用通过标准输入提供的脚本(如MRI“图书管理员”程序)来控制它。
概要
ar [ -X32_64 ] [ - ] p [ mod [ relpos ] [ count ]] 存档 [ member ...]
OPTIONS
GNU ar允许您在第一个命令行参数内以任意顺序混合操作代码p和修饰符标记mod 。
如果你愿意,你可以用破折号开始第一个命令行参数。
p键盘符指定要执行的操作; 它可能是以下任何一种,但您只能指定其中之一:
d
从档案中删除模块。 指定要作为成员删除的模块的名称...; 如果您没有指定要删除的文件,则归档文件将保持不变。
如果您指定了v修饰符,那么ar会在删除每个模块时列出它。
米
使用此操作可移动档案中的成员。
如果一个符号在多个成员中定义,则归档中成员的顺序可以影响程序如何使用该库进行链接。
如果没有修饰符与“m”一起使用,则您在成员参数中指定的任何成员都将移至存档的末尾 ; 您可以使用a , b或i修饰符将它们移动到指定的位置。
p
将档案的指定成员打印到标准输出文件。 如果指定了v修饰符,则在将其内容复制到标准输出之前显示其成员名称。
如果您不指定成员参数,则打印存档中的所有文件。
q
快速追加 ; 从历史上看,将文件成员 ...添加到归档结尾,而不检查替换。
修饰符a , b和i 不会影响此操作; 新成员始终放在档案末尾。
修饰符v会在每个文件添加后列出ar列表。
由于该操作的速度是速度,因此即使存档已经存在,存档的符号表索引也不会更新; 您可以显式使用ar s或ranlib来更新符号表索引。
然而,太多不同的系统假设快速追加重建索引,所以GNU ar实现了“q”作为“r”的同义词。
[R
将文件成员 ...插入存档 (带替换 )。 此操作与q不同,因为如果以前存在的成员的名称与添加的成员名称相匹配,则会删除它们。
如果其中一个在member ...中命名的文件不存在, ar会显示一条错误消息,并且不会打扰与该名称匹配的所有存档成员。
默认情况下,新成员添加在文件的末尾; 但是您可以使用修饰符a , b或i之一来请求相对于某个现有成员的放置。
与此操作一起使用的修饰符v为插入的每个文件引出一行输出,以及字母a或r之一以指示文件是否被附加(不删除旧成员)或被替换。
Ť
显示列出存档内容或存档中存在的成员 ...中列出文件的内容的表格 。 通常只显示成员名称; 如果您还想查看模式(权限),时间戳,所有者,组和大小,则还可以通过指定v修饰符来请求。
如果您未指定成员 ,则列出存档中的所有文件。
如果档案中有多个同名文件(比如说fie )(比如ba ),则只列出第一个实例; 要看到他们,你必须要求一个完整的清单---在我们的例子中, ar t ba 。
X
从存档中提取成员(名为成员 )。 您可以对此操作使用v修饰符,以便在提取ar时列出每个名称。
如果您未指定成员 ,则会提取存档中的所有文件。
一些修饰符( mod )可能会紧跟在p关键字后面,以指定操作行为的变化:
一个
在存档的现有成员之后添加新文件。 如果使用修饰符a ,则在归档规范之前,现有归档成员的名称必须作为relpos参数存在。
b
在存档的现有成员之前添加新文件。 如果使用修饰符b ,则在归档规范之前,现有归档成员的名称必须作为relpos参数存在。 (和我一样 )。
C
创建存档。 如果指定的存档不存在,则在您请求更新时始终创建指定的存档 。 但是,除非事先通过使用此修饰符指定您希望创建它,否则会发出警告。
F
截断存档中的名称。 GNU ar通常会允许任意长度的文件名。 这将导致它创建与某些系统上的本机ar程序不兼容的存档。 如果这是一个问题,则可以使用f修饰符在将文件名放入存档时截断文件名。
一世
在存档的现有成员之前插入新文件。 如果使用修饰符i ,则在归档规范之前,现有归档成员的名称必须作为relpos参数出现。 (与b相同)。
升
这个修饰符被接受但没有被使用。
ñ
使用计数参数。 如果档案中有多个条目具有相同的名称,则使用此名称。 从存档中提取或删除给定名称的实例数 。
Ø
提取成员时保留成员的原始日期。 如果不指定此修饰符,则从存档中提取的文件将标记提取时间。
P
在存档中匹配名称时使用完整路径名称。 GNU ar无法创建具有完整路径名称的存档(此类存档不是POSIX投诉),但其他存档创建者可以。 该选项将使GNU ar使用完整的路径名匹配文件名,当从另一个工具创建的存档中提取单个文件时,这可能很方便。
小号
将对象文件索引写入存档,或者更新现有的索引,即使对存档没有其他更改。 您可以将这个修饰符标志用于任何操作,也可以单独使用。 在存档上运行ars相当于在其上运行ranlib 。
小号
不要生成归档符号表。 这可以加快建设一个大型图书馆的几个步骤。 生成的存档不能与链接器一起使用。 为了构建符号表,您必须在上次执行ar时忽略S修饰符,或者必须在存档上运行ranlib 。
ü
通常, ar r ...将列出的所有文件插入到存档中。 如果您只想插入那些比相同名称的现有成员更新的文件,请使用此修饰符。 u修饰符仅适用于r (替换)操作。 特别是,组合曲线是不允许的,因为检查时间戳会失去操作q的速度优势。
v
该修饰符请求操作的详细版本。 当附加修饰符v时,许多操作都会显示其他信息 ,例如已处理的文件名。
V
该修饰符显示ar的版本号。
为了与AIX兼容, ar忽略了拼写为-X32_64的初始选项。 这个选项产生的行为是GNU ar的默认值。 ar不支持任何其他-X选项; 特别是它不支持AIX ar的缺省-X32 。
重要提示:使用man命令( %man )查看特定计算机上的命令使用方式。