linux ar命令参数及用法详解--linux建立、修改或抽取备存文件
2013-06-27 18:00
1336 查看
最近要看静态链接库文件(.a文件)里的内容,用到ar命令和nm命令,转一下。
ar命令功能说明:建立或修改备存文件,或是从备存文件中抽取文件。
语 法:ar[-dmpqrtx][cfosSuvV][a<成员文件>][b<成员文件>][i<成员文件>][备存文件][成员文件]补充说明:ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限。
参 数:
指令参数
-d 删除备存文件中的成员文件。
-m 变更成员文件在备存文件中的次序。
-p 显示备存文件中的成员文件内容。
-q 将问家附加在备存文件末端。
-r 将文件插入备存文件中。
-t 显示备存文件中所包含的文件。
-x 自备存文件中取出成员文件。
选项参数
a<成员文件> 将文件插入备存文件中指定的成员文件之后。
b<成员文件> 将文件插入备存文件中指定的成员文件之前。
c 建立备存文件。
f 为避免过长的文件名不兼容于其他系统的ar指令指令,因此可利用此参数,截掉要放入备存文件中过长的成员文件名称。
i<成员文件> 将问家插入备存文件中指定的成员文件之前。
o 保留备存文件中文件的日期。
s 若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。
S 不产生符号表。
u 只将日期较新文件插入备存文件中。
v 程序执行时显示详细的信息。
V 显示版本信息。
范例1: 打包文件
[root@linuxso.com ~]# ls //显示当前目录文件
a.c b.c d.c install.log qte
anaconda-ks.cfg c.c Desktop
[root@linuxso.com ~]# ar rv one.bak a.c b.c //打包 a.c b.c文件
ar: 正在创建 one.bak
a - a.c
a - b.c
[root@linuxso.com ~]#
范例2: 打包多个文件
[root@linuxso.com ~]# ar rv two.bak *.c //打包以.c结尾的文件
ar: 正在创建 two.bak
a - a.c
a - b.c
a - c.c
a - d.c
[root@linuxso.com ~]#
范例3:显示打包文件的内容
[root@linuxso.com ~]# ar t two.bak
a.c
b.c
c.c
d.c
[root@linuxso.com ~]#
范例4:删除打包文件的成员文件
[root@linuxso.com ~]# ar d two.bak a.c b.c c.c
[root@linuxso.com ~]# ar t two.bak
d.c
[root@linuxso.com ~]#
使用示例:
1、构造可重用的库文件,并显示构造每个成员的文件详细过程。有文件a1,a2放到库lib中
ar -rv lib a1,a2
2、检查示lib上的成员文件,并添加一个新的文件。
root@linuxso.com:~# ar -tv lib
rw-r--r-- 1000/1000 0 Jan 2
18:01 2011 a1
rw-r--r-- 1000/1000 0 Jan 2
18:01 2011 a2
添加一个新文件:
root@linuxso.com:~# ar -tv lib
rw-r--r-- 1000/1000 0 Jan 2
18:01 2011 a1
rw-r--r-- 1000/1000 0 Jan 2
18:01 2011 a2
root@linuxso.com:~# ar -qv lib 小哨兵还原卡
a - 小哨兵还原卡
root@linuxso.com:~# ar -tv lib
rw-r--r-- 1000/1000 0 Jan 2
18:01 2011 a1
rw-r--r-- 1000/1000 0 Jan 2
18:01 2011 a2
rw-r--r-- 1000/1000 880 Dec 31 17:19 2010 小哨兵还原卡
3、在lib库中的小哨兵还原卡前面插入文件
root@linuxso.com:~# ar -vbr 小哨兵还原卡 lib network
a - network
root@linuxso.com:~# ar -tv lib
rw-r--r-- 1000/1000 0 Jan 2
18:01 2011 a1
rw-r--r-- 1000/1000 0 Jan 2
18:01 2011 a2
rw-r--r-- 1000/1000 3489 Dec 31 22:39 2010 network
rw-r--r-- 1000/1000 880 Dec 31 17:19 2010 小哨兵还原卡
注:
(1)不能添加目录文件
(2)添加的文件必须是普通文件
(3)在使用-a,-b,-i时,必须在命令行指明一个在库中已经存在的成员
nm命令
该命令列出可执行文件、动态链接库,等二进制文件中的符号表;
nm命令还是比较简单而且强大的。它用来列出一个目标文件中的各种符号。符号的种类很多,以下是一些常见的符号类型
nm输出字符 | 含义 |
R | Read only symbol. 比如在代码中有一个const MAXDATA = 3095; 则MAXDATA就是一个Read only symbol |
N | 这是一个调试符号 |
D | 这是一个已经初始化的变量的符号。比如代码中int i = 1和char *str = "Hello"则i和str都是这种类型的符号 |
T | Text段的符号。子程序都是这种符号,比如文件中实现了一个函数function,则function就是这种符号 |
U | 未定义的符号。如果文件中引用了不存在的函数,则这些未定义的函数符号就是这种类型 |
S | 未初始化的符号,比如全局变量int s;则s的符号就是此类型 |
先来例子,以下是a.c的内容:
#include <stdio.h>static int s_global;
int i = 1;
char *str = "hello, world";
const ID = 10;
extern int e_global;
void function()
{
printf("Hello");
}
int get_x()
{
int x;
x = 33;
return x;
}
在执行"gcc -g -O -c a.c"产生a.o之后,用"nm -A a.o"的输出为:
a.o:00000000 R ID
a.o:00000000 T function
a.o:00000014 T get_x
a.o:00000000 D i
a.o: U printf
a.o:00000000 b s_global
a.o:00000004 D str
nm的用法
nm的用法很简单,以下几个关键字比较常用:1、"-A",列出符号名的时候同时显示来自于哪个文件。
这在同时列出多个文件(比如一个链接库)的符号时比较有用2、"-a",列出所有符号
这将会把调试符号也列出来。默认状态下调试符号不会被列出。3、"-l",列出符号在源代码中对应的行号
指定这个参数后,nm将利用调试信息找出文件名以及符号的行号。对于一个已定义符号,将会找出这个符号定义的行号,对于未定义符号,显示为空4、"-n",根据符号的地址来排序
默认是按符号名称的字母顺序排序的5、"-u",只列出未定义符号
同"--undefined-only", 而"--defined-only"将只列出已定义符号相关文章推荐
- linux touch命令参数及用法详解---linux修改文件的时间
- wlinux touch命令参数及用法详解---linux修改文件的时间
- linux cp命令参数及用法详解---linux 复制文件命令cp
- linux chmod命令参数及用法详解--文件文件夹权限设定命令
- linux cp命令参数及用法详解---linux 复制文件命令cp
- 【转】linux mkfs命令参数及用法详解---linux格式化文件系统命令(包括swap分区)
- linux date命令参数及用法详解(linux查看修改系统时间)
- linux ln命令参数及用法详解---linux连接文件或目录命令
- linux rm命令参数及用法详解---linux删除文件或目录命令
- [zz]linux dd命令参数及用法详解---用指定大小的块拷贝一个文件
- linux find命令参数及用法详解--linux查找文件命令
- linux split命令参数及用法详解---linux分割文件命令
- linux chmod命令参数及用法详解--文件文件夹权限设定命令
- linux ln命令参数及用法详解---linux连接文件或目录命令
- linux cp命令参数及用法详解---linux 复制文件命令cp
- linux chmod命令参数及用法详解--文件文件夹权限设定命令
- linux usermod命令参数及用法详解(linux修改用户账号信息命令)
- linux date命令参数及用法详解--linux查看修改系统时间
- linux mount命令参数及用法详解---linux挂载光盘等文件系统的命令