歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> UNIX的ar命令

UNIX的ar命令

日期:2017/2/28 14:29:56   编辑:Linux教程

常用選項

源代碼文件在編譯之後生成相應的目標文件(.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");
}

做如下操作:

[[email protected] ar]$ ls
1.c 2.c
[[email protected] ar]$ gcc -c 1.c 2.c
[[email protected] ar]$ ls
1.c 1.o 2.c 2.o
[[email protected] ar]$ ar -r libtest.a 1.o
ar: creating libtest.a
[[email protected] ar]$ ar -r libtest.a 2.o
[[email protected] ar]$ ar -t libtest.a
1.o
2.o
[[email protected] ar]$ ar -d libtest.a 1.o
[[email protected] ar]$ ar -t libtest.a
2.o
[[email protected] ar]$ ar -r libtest.a 1.o
[[email protected] ar]$ rm -rf 1.o 2.o
[[email protected] ar]$ ls
1.c 2.c libtest.a
[[email protected] ar]$ ar -x libtest.a
[[email protected] 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中的符號表信息。比如:

[[email protected] 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
[[email protected] ar]$

Copyright © Linux教程網 All Rights Reserved