ar 命令

用途

维护链接编辑器使用的索引库。

语法

ar [  -c ] [  -l ] [  -g | -o ] [  -s ] [  -v ] [  -C ] [  -T ] [  -z ] {  -h |  -p |  -t |  -x } [  -X  {32|64|32_64}] ArchiveFile [ File ... ]

ar [  -c ] [  -l ] [  -g | -o ] [  -s ] [  -v ] [  -C ] [  -T ] [  -z ] {  -m |  -r [  -u ] } [ {  -a |  -b |  -i }  PositionName  ] [  -X  {32|64|32_64}]   ArchiveFile File ...

ar [  -c ] [  -l ] [  -g | -o ] [  -s ] [  -v ] [  -C ] [  -T ] [  -z ] {  -d |  -q } [  -X  {32|64|32_64}] ArchiveFile File ...

ar [  -c ] [  -l ] [  -v ] [  -C ] [  -T ] [  -z ] {  -g | -o |  -s |  -w } [  -X  {32|64|32_64}] ArchiveFile

描述

ar 命令维护链接编辑器使用的索引库。ar 命令将一个或多个指定的文件并入单个写成 ar 压缩文档格式的压缩文档文件。当 ar 命令创建库时,它创建可传输格式的报头;当它创建或更新库时,它重建符号表。有关格式和索引压缩文档和符号表的结构的信息,请参阅 ar 文件格式条目。

ar 命令识别两种文件格式。“大压缩文档格式”ar_big,是缺省文件格式并支持 32 位和 64 位目标文件。“小压缩文档格式”可用于创建在比 AIX 4.3 更老的版本上可识别的压缩文档,请参阅 -g 标志。如果将一个 64 位的对象添加到小格式压缩文档,除非指定了 -g,否则 ar 首先将它转换为大格式。缺省情况下,ar 仅处理 32 位目标文件;压缩文档中任何 64 位目标文件在没有提示的情况下被忽略。要更改此行为,请使用 -X 标志或设置 OBJECT_MODE 环境变量。

标志

在 ar 命令中,可以从集 cClosTv 中指定任何数量的可选标志。必须从标志集 dhmopqrstwx 中指定一个标志。如果选择 -m 或 -r 标志,您可能还要指定一个位置标志(-a、-b 或 -i);对于 -a、-b 或 -i 标志,您必须还指定在 ArchiveFile(PositionName)中一个文件的名称,此名称紧跟在标志列表后,并由空格隔开。

-a PositionName     在 PositionName 参数标识的现有文件后安置指定的文件。

-b PositionName     在 PositionName 参数标识的现有文件前安置指定的文件。

-c     禁止在创建库时产生的正常消息。

-C     阻止解压缩的文件替换文件系统中同名的文件。

-d     从库中删除指定的文件。

-g     对压缩文档成员进行排序以确保用最小数量的未用空间获得最大的加载效率。在几乎所有情况下,-g 标志以压缩文档成员的逻辑链接顺序物理地安置它们。最终生成的压缩文档通常写成小格式,这样该标志可用来将大格式压缩文档转换成小格式压缩文档。包含 64 位 XCOFF 对象的压缩文档不能创建成或转换至小格式。

-h     将指定的文件的成员报头中的修改时间设置为当前日期和时间。如果不指定任何文件名称,则 ar 命令设置所有成员报头的时间戳记。此标志不能和 -z 标志一起使用。

-i PositionName     在 PositionName 参数标识的现有文件前安置指定的文件(和 -b 相同)。

-l     将临时文件置于当前(本地)目录中,而非 TMPDIR 目录中(缺省为 /tmp)。

-m     将指定的文件移动到库中的某个其它位置。缺省情况下,它将指定的文件移动到库的末尾。使用位置标志(abi)来指定某个其它位置。

-o     对压缩文档成员进行排序以确保用最小数量的未用空间获得最大的加载效率。在几乎所有情况下,-o 标志以压缩文档成员的逻辑链接顺序物理地安置它们。最终生成的压缩文档通常写成大格式,这样该标志可用来将小格式压缩文档转换成大格式压缩文档。

-p     将 Files 参数中指定的文件的内容或在 ArchiveFile 参数中指定的所有文件(如果您不指定任何文件)都写至标准输出。

-q     将指定的文件添加到库的末尾。另外,如果指定同一个文件两次,它可能被放入库中两次。

-r     如果指定的文件已经存在于库中,则替换它。因为指定的文件在库中占据它们替换的文件的同一个位置,位置标志没有任何附加的影响。当和 -u 标志(更新)一起使用时,-r 标志仅替换自从最后一次添加到库中以后修改的文件。

如果指定的文件不存在于库中,则 ar 命令添加它。在这种情况下,位置标志影响放置。如果不指定位置,则将新文件置于库的末尾。如果指定同一个文件两次,它可能被放入库中两次。

-s     无论 ar 命令是否修改了库内容都强制重新生成库符号表。请在库上使用 strip 命令之后,使用此标志来恢复库符号表。

-t     将库的目录写至标准输出。如果指定文件名称,则仅显示指定的那些文件。如果不指定任何文件,-t 标志列出库中的所有文件。

-T     如果压缩文档成员名称比文件系统支持的长,则允许文件名称截短。此选项无效,因为文件系统支持的名称长度等于 255 个字符的最大压缩文档成员名称。

-u     仅复制自它们最后一次复制起更改的文件(请参阅先前讨论过的 -r 标志)。

-v     将建立新库的详细的逐个文件的描述写至标准输出。当和 -t 标志一起使用时,它给出类似于 ls -l 命令给出的长列表。当和 -x 标志一起使用时,它在每个文件前加一个名称。当和 -h 标志一起使用,它列出成员名称和更新的修改时间。

-w     显示压缩文档符号表。每个符号和其中定义此符号的文件的名称一起列出。

-x     通过将指定的文件复制到当前目录来解压缩它们。这些副本和原始文件(保留在库中)具有相同的名称。如果不指定任何文件,-x 标志复制库中的所有文件。此过程不会更改库。

-X mode     指定 ar 应检查的目标文件的类型。mode 必须是以下项之一:

32

仅处理 32 位目标文件

64

仅处理 64 位目标文件

32_64

处理 32 位 和 64 位目标文件

缺省值是处理 32 位目标文件(忽略 64 位对象)。mode 还可以用 OBJECT_MODE 环境变量来设置。例如,OBJECT_MODE=64 使 ar 处理任何 64 位对象并忽略 32 位对象。-X 标志覆盖 OBJECT_MODE 变量。

-z     创建压缩文档的临时副本并对副本执行所有要求的修改。当所有操作成功完成时,压缩文档的工作副本覆盖原始副本。此标志不能和 -h 标志一起使用。

ArchiveFile     指定压缩文档文件名称;必需。

MemberName ...     各压缩文档成员的名称。

退出状态

该命令返回以下出口值:

0     成功完成。

>0     发生错误。

示例

1. 要创建一个库,请输入:

ar -v -q lib.a strlen.o strcpy.o

如果 lib.a 库不存在,则此命令创建它,并将文件 strlen.o 和 strcpy.o 的副本输入其中。如果 lib.a 库存在,则此命令在不检查相同成员的情况下,将新的成员添加到末尾。v 标志设置详细方式,在此方式中 ar 命令在其进行时显示进程报告。

2. 要显示库的目录,请输入:

ar -v -t lib.a

此命令列出了 lib.a 库的目录,显示类似于 ls -l 命令的输出的长列表。要只列出成员文件名称,则省略 -v 标志。

3. 要替换或添加新成员到库中,请输入:

ar -v -r lib.a strlen.o strcat.o

此命令替换成员 strlen.o 和 strcat.o。如果 lib.a 如示例 1 中显示的那样创建,则替换 strlen.o 成员。因为不存在名为 strcat.o 的成员,所以它被添加到库的末尾。

4. 要指定在何处插入新成员,请输入:

ar -v -r -b strlen.o lib.a strcmp.o

此命令添加 strcmp.o 文件,并将该新成员置于 strlen.o 成员之前。

5. 要更新一个已经更改过的成员,请输入:

ar -v -r -u lib.a strcpy.o

此命令替换现有 strcpy.o 成员,但仅当文件 strcpy.o 自从最后一次添加到库后已经修改时才替换它。

6. 要更改库成员的顺序,请输入:

ar -v -m -a strcmp.o lib.a strcat.o strcpy.o

此命令将成员 strcat.o 和 strcpy.o 移动到紧跟在 strcmp.o 成员之后的位置。保留 strcat.o 和 strcpy.o 成员的相对顺序。换句话说,如果在移动之前 strcpy.o 成员在 strcat.o 成员之前,那么(移动后)它依旧如此。

7. 要解压缩库成员,请输入:

ar -v -x lib.a strcat.o strcpy.o

此命令将成员 strcat.o 和 strcpy.o 分别复制到名为 strcat.o 和 strcpy.o 的文件。

8. 要解压缩并重命名一个成员,请输入:

ar -p lib.a strcpy.o >stringcopy.o

此命令将成员 strcpy.o 复制到一个名为 stringcopy.o 的文件。

9. 要删除一个成员,请输入:

ar -v -d lib.a strlen.o

此命令从 lib.a 库中删除成员 strlen.o。

10. 要从多个用 ld 命令创建的共享模块中创建一个压缩文档库,请输入:

ar -r -v libshr.a shrsub.o shrsub2.o shrsub3.o ...

此命令从名为 shrsub.o、shrsub2.o、shrsub3.o 等等的共享模块中创建名为 libshr.a 的压缩文档库。要编译并链接使用 libshr.a 压缩文档库的 main 程序,请使用以下命令:

cc -o main main.c -L/u/sharedlib -lshr

main 程序现在是可执行的。main 程序引用的任何符号(包含在libshr.a 压缩文档库中)已经因延迟分辨率而作了标记。-l 标志指定应在 libshr.a 库中搜索这些符号。

11. 要列出 lib.a 的内容(忽略任何 32 位目标文件),请输入:

ar -X64 -t -v lib.a

12. 要从 lib.a 解压缩所有 32 位的目标文件,请输入:

ar -X32 -x lib.a

13. 要列出 lib.a 中的所有文件,无论是 32 位、64 位或非对象,请输入:

ar -X32_64 -t -v lib.a

ar命令详解的更多相关文章

  1. net user命令详解

    net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user: ...

  2. shell-----sed命令详解

    Table of Contents 1. Sed简介  2. 定址  3. Sed命令  4. 选项  5. 元字符集  6. 实例  7. 脚本 1. Sed简介 sed是一种在线编辑器,它一次处理 ...

  3. 【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(一) RTMP 命令详解

    源码地址:https://github.com/Tinywan/PHP_Experience 说明: rtmp的延迟主要取决于播放器设置,但流式传输软件,流的比特率和网络速度(以及响应时间“ping” ...

  4. linux shell 脚本攻略学习12--文件权限详解,chmod命令详解,chown命令详解,chattr命令详解

    文件权限详解 一.chmod命令详解 文件权限和所有权是Unix/Linux文件系统最显著的特征之一.linux中的每一个文件都与多种权限类型相关联,在这些权限中主要分类为3种: 用户(User)是文 ...

  5. DOS常用命令详解

    DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘 edit ...

  6. Linux常用命令详解—基于CentOS7

    ## Linux 目录- /:根目录,一般只存放目录,不存放文件- /bin -> /usr/bin:可执行二进制文件的目录,也是常用命令目录,如常用的命令 ls.cat.mv 等- /boot ...

  7. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  8. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  9. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

随机推荐

  1. html 设置宽度100% 块状元素往下调解决方法

    css在设置body的宽度为100%充满整个屏幕时,当浏览器缩小时块状元素会被挤压下去 解决方案非常简单,给body设置一个最小宽度 min-width:960px; 此时即使浏览器缩小,在960像素 ...

  2. java06

    阅读并运行示例PassArray.java,观察并分析程序输出的结果 小结:引用传递.如果方法中有代码则更改了数组元素的值,因为引用时传递的是地址. 阅读程序WhatDoesThisDo.java, ...

  3. c#控制打印机杂项

    因项目中需要用到控制打印机的相关信息,此贴将网络寻找的资料做了些整理 1. C# 如何设置系统的默认打印机 using System.Runtime.InteropServices;   [DllIm ...

  4. Android+jsp +html 文件上传案例 已测试 成功通过

    我文件上传一直是广大读者一个问题 今天就把成功案例写下 javaweb 网页前段 <%@ page language="java" import="java.uti ...

  5. Linux系统的理解及学习Linux内核的心得

    作业列表      (点击作业跳转) linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作 linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核 ...

  6. window下搭建c开发环境(GNU环境的安装)

    一.在windows平台上安装GNU环境 windows操作系统不自带GNU环境,如果需要开发跨平台的C语言程序,那么需要给windows安装GNU环境 windows下的两款GNU环境:MinGW和 ...

  7. 学习笔记:delphi多线程知识

    最近一直在温习旧的知识,刚好学习了一下Java的线程安全方面的知识,今天想起之前一直做的Delphi开发,所以还是有必要温习一下,看看这些不同的编程语言有什么不同之处. Delphi的线程同步方法: ...

  8. 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)

    前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...

  9. Linux守护进程之Supervisor

    1. 什么是守护进程 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在linux中,每个 ...

  10. 《Effective Java》—— 读后总结

    这本书在Java开发的行业里,颇有名气.今天总算是粗略的看完了...后面线程部分和序列化部分由于心浮气躁看的不仔细.这个月还剩下一周,慢慢总结消化.