UNIX的ar命令

常用选项

源代码文件在编译之后生成相应的目标文件(.o文件),通常制作静态库的过程就是将这些.o文件打包成一个libXXXX.a文件。
ar命令常用的几个命令选项的含义如下:

-r
格式:ar -r libXXXX.a 1.o 2.o
说明:lib文件不存在时,首先创建lib文件,然后将.o文件添加到静态库文件中

-t 
格式:ar -t libXXXX.a
说明:展示当前lib文件中所包含的.o文件

-d
格式:ar -d libXXXX.a 1.o
说明:将1.o从静态库文件libXXXX.a中删除

-x
格式:ar -x libXXXX.a
说明:将静态库文件libXXXX.a中的所有文件解压出来

现在我们编辑两个.c文件,分别如下。
1.c
#include<stdio.h>
void func1() {
	printf("call func1.\n");
} 
//2.c
#include<stdio.h>
void func2() {
	printf("call func2.\n");
}

做如下操作:
[extzjl@ibm2-001 ar]$ ls
1.c  2.c
[extzjl@ibm2-001 ar]$ gcc -c 1.c 2.c 
[extzjl@ibm2-001 ar]$ ls
1.c  1.o  2.c  2.o
[extzjl@ibm2-001 ar]$ ar -r libtest.a 1.o 
ar: creating libtest.a
[extzjl@ibm2-001 ar]$ ar -r libtest.a 2.o 
[extzjl@ibm2-001 ar]$ ar -t libtest.a 
1.o
2.o
[extzjl@ibm2-001 ar]$ ar -d libtest.a 1.o 
[extzjl@ibm2-001 ar]$ ar -t libtest.a 
2.o
[extzjl@ibm2-001 ar]$ ar -r libtest.a 1.o 
[extzjl@ibm2-001 ar]$ rm -rf 1.o 2.o 
[extzjl@ibm2-001 ar]$ ls
1.c  2.c  libtest.a
[extzjl@ibm2-001 ar]$ ar -x libtest.a 
[extzjl@ibm2-001 ar]$ ls
1.c  1.o  2.c  2.o  libtest.a

特别用法

特别说明的是ar命令的-s用法.旧版本UNIX操作系统在使用ar添加一个.o文件,如果相同名字的.o文件已经存在于静态库,将替换这个.o文件,否则就简单的将这个.o文件后缀在静态库文件的末尾.接着在使用ld进行链接时,可能还会报无法找到函数或者全局变量的错误。这是由于静态库文件中的符号索引表信息并没有更新,依旧使用的是旧的.o文件的符号表信息。为了克服这个问题,提供了ranlib工具,进行符号表的更新,所以通常在一些版本比较老的UNIX程序的Makefile中通常能看到这样的命令:
libXXXX.a: 1.o 2.o ...
                  ar -rv libXXXX.a 1.o 2.o ...
                  ranlib libXXXX.a
新版本的ar命令默认会更新符号表,因此不再需要使用ranlib来更新了。因为默认时符号表会被更新,所以 ar -rsv和ar -rv的功能是一样的.
可以使用nm命令来查看libXXXX.a中的符号表信息。比如:
[extzjl@ibm2-001 ar]$ nm -s libtest.a 

Archive index:
func1 in 1.o
func2 in 2.o

1.o:
0000000000000000 T func1
                 U puts

2.o:
0000000000000000 T func2
                 U puts
[extzjl@ibm2-001 ar]$ 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值