ar命令学习
之前,学习Linux下使用静态库的时候涉及到了这三个命令:
gcc -c my_strcpy.c my_strcmp.c
ar rcs libmylib.a *.o
gcc -o main main.c -static -L. –lmylib
这里来学习一下ar这个命令。
ar的三个参数中:
r - 代表将文件插入归档文件中;
c - 代表建立归档文件;
s - 代表若归档文件中包含了对象模式,可利用此参数建立备存文件的符号表。
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命令学习的更多相关文章
- penghui_031413 Bat命令学习
penghui_031413 Bat命令学习 基础部分:====================================================================== ...
- ar命令详解
ar 命令 用途 维护链接编辑器使用的索引库. 语法 ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { ...
- 别出心裁的Linux命令学习法
别出心裁的Linux命令学习法 操作系统操作系统为你完成所有"硬件相关.应用无关"的工作,以给你方便.效率.安全.操作系统的功能我总结为两点:管家婆和服务生: 管家婆:通过进程.虚 ...
- Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)
简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...
- 【转】linux ar 命令的使用说明那个和例子
from: http://blog.csdn.net/xljiulong/article/details/7082960 linux ar 命令的使用说明那个和例子 标签: linuxmakefile ...
- Linux命令学习
Linux命令学习 Ubuntu常用快捷键 •Ctrl+Alt+T: 打开终端 •Ctrl+Shift+T: 新建标签页 •Tab: 终端中命令补全 •Alt+数字N: 终端中切换到第N个标签页 •↑ ...
- linux ar命令
当我们的程序中有经常使用的模块,而且这种模块在其他程序中也会用到,这时按照软件重用的思想,我们应该将它们生成库,使得以后编程可以减少开发代码量.这里介绍命令ar,用来对库操作. 1.ar基本用法 ar ...
- 使用ar命令删除iOS静态库重复编译的.o文件
关于 xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误 看这里 http://www.cnblogs.com/cocoajin/p/3917709.ht ...
- ar命令和nm命令(建库!)
ar 命令详解 今天,跟着我们的技术大牛学了不少东西,首先就是这个ar命令啦. 当我们的程序中有经常使用的模块,而且这些模块在其他程序中也会用到,为了实现代码重用减少软件开发周期,我们可以将它们生成库 ...
随机推荐
- Linux Centos7安装chrome浏览器
参考:https://blog.csdn.net/u010472499/article/details/72327963 1. 配置yum源 在目录 /etc/yum.repos.d/ 下新建文件 g ...
- OpenCV学习笔记(四十)——再谈OpenCV数据结构Mat详解
原文:http://blog.csdn.net/yang_xian521/article/details/7107786 我记得开始接触OpenCV就是因为一个算法里面需要2维动态数组,那时候看cor ...
- angularjs中ng-class的使用
1.方法一 通过数据的双向绑定(不推荐) <!DOCTYPE html> <html ng-app="myApp"> <head> <me ...
- 微信小程序 - 输入起点、终点获取距离并且进行路线规划(腾讯地图)
更新: 2018-9-19 腾讯官方经纬度转详细地址,详细地址转经纬度 index.wxml <!--地图容器--> <map id="myMap" style= ...
- FFmpeg视频处理必备
http://ffmpeg.org/官网 A complete, cross-platform solution to record, convert and stream audio and vid ...
- html5图像、图片处理【转】
本文主题 情人节在网上看到国外JS牛人利用HTML5技术实现的一朵玫瑰花,深切的感受到HTML5技术的强大.本着学习的态度看了一下那朵玫瑰花的源代码,其中用到的HTML5技术是canvas标签,于是灵 ...
- [转发]在Visual Studio 2010/2012/2013/2015上使用C#开发Android/IOS安装包和操作步骤
官方学习文档:http://developer.xamarin.com/guides/android/getting_started/ 官方学习例子:http://developer.xamarin. ...
- 一些Java面试题深入分析
一.&和&&的差别? &和&&都能够用作逻辑与的运算符.表示逻辑与(and),当运算符两边的表达式的结果都为true时.整个运算结果才为true,否则, ...
- DBCP( 二) DataBase Connection Pool 的使用
使用DBCP必须用的三个包: commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar. 配置参数. Java ...
- 数据库选型之MySQL(多线程并发)
刘勇 Email: lyssym@sina.com 本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于高频中心库 ...