加入收藏 | 设为首页 | 会员中心 | 我要投稿 海洋资讯信息网_我爱站长网 (https://www.haijunwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX的ar命令

发布时间:2022-10-26 15:38:41 所属栏目:Unix 来源:
导读:  常用选项

  源代码文件在编译之后生成相应的目标文件(.o文件),通常制作静态库的过程就是将这些.o文件打包成一个libXXXX.a文件。

  ar命令常用的几个命令选项的含义如下:

  -r

  格式:
  常用选项
 
  源代码文件在编译之后生成相应的目标文件(.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
 
  void func1() {
 
  printf("call func1.\n");
 
  }
 
  //2.c
 
  #include
 
  void func2() {
 
  printf("call func2.\n");
 
  }
 
  做如下操作:
 
  [linux@ ar]$ ls
 
  1.c 2.c
 
  [linux@ ar]$ gcc -c 1.c 2.c
 
  [linux@ ar]$ ls
 
  1.c 1.o 2.c 2.o
 
  [linux@ ar]$ ar -r libtest.a 1.o
 
  ar: creating libtest.a
 
  [linux@ ar]$ ar -r libtest.a 2.o
 
  [linux@ ar]$ ar -t libtest.a
 
  1.o
 
  2.o
 
  [linux@ ar]$ ar -d libtest.a 1.o
 
  [linux@ ar]$ ar -t libtest.a
 
  2.o
 
  [linux@ ar]$ ar -r libtest.a 1.o
 
  [linux@ ar]$ rm -rf 1.o 2.o
 
  [linux@ ar]$ ls
 
  1.c 2.c libtest.a
 
  [linux@ ar]$ ar -x libtest.a
 
  [linux@ ar]$ ls
 
  1.c 1.o 2.c 2.o libtest.a
 
  特别用法
 
  特别说明的是ar命令的-s用法.旧版本UNIX操作系统在使用ar添加一个.o文件,如果相同名字的.o文件已经存在于静态库unix命令图解,将替换这个.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中的符号表信息。比如:
 
  [linux@ 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
 
  [linux@ ar]$
  
 

(编辑:海洋资讯信息网_我爱站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!