當我們的程序中有經常使用的模塊,而且這種模塊在其他程序中也會用到,這時按照軟件重用的思想,我們應該將它們生成庫,使得以后編程可以減少開發代碼量。這里介紹命令ar,用來對庫操作。 1.ar基本用法
ar命令可以用來創建、修改庫,也可以從庫中提出單個模塊。庫是一單獨的文件,里面包含了按照特定的結構組織起來的其它的一些文件(稱做此庫文件的member)。原始文件的內容、模式、時間戳、屬主、組等屬性都保留在庫文件中。
下面是ar命令的格式:
ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files...
例如我們可以用ar rv libtest.a hello.o hello1.o來
生成一個庫,庫名字是test,鏈接時可以用-ltest鏈接。該庫中存放了兩個模塊hello.o和hello1.o。選項前可以有‘-'字符,也可以
沒有。下面我們來看看命令的操作選項和任選項。現在我們把{dmpqrtx}部分稱為操作選項,而[abcfilNoPsSuvV]部分稱為任選項。
補充說明:ar可讓您集合許多文件,成為單一的備存文件。在備存文件中,所有成員文件皆保有原來的屬性與權限。
參 數: 指令參數 -d 刪除庫文件中的成員文件。 -m 變更成員文件在庫文件中的次序。 -p 顯示庫文件中的成員文件內容。 -q 將問家附加在庫文件末端。 -r 將文件插入庫文件中。 -t 顯示庫文件中所包含的文件。 -x 自庫文件中取出成員文件。 選項參數 a<成員文件> 將文件插入庫文件中指定的成員文件之后。 b<成員文件> 將文件插入庫文件中指定的成員文件之前。 c 建立庫文件。 f 為避免過長的文件名不兼容於其他系統的ar指令指令,因此可利用此參數,截掉要放入庫文件中過長的成員文件名稱。 i<成員文件> 將問家插入庫文件中指定的成員文件之前。 o 保留庫文件中文件的日期。 s 若庫文件中包含了對象模式,可利用此參數建立備存文件的符號表。 S 不產生符號表。 u 只將日期較新文件插入庫文件中。 v 程序執行時顯示詳細的信息。 V 顯示版本信息。
ar用來管理一種文檔。這種文檔中可以包含多個其他任意類別的文件。這些被包含的文件叫做這個文檔的成員。ar用來向這種文檔中添加、刪除、解出成員。成員的原有屬性(權限、屬主、日期等)不會丟失。
實際上通常只有在開發中的目標連接庫是這種格式的,所以盡管不是,我們基本可以認為ar是用來操作這種目標鏈接庫(.a文件)的。
ar的常用用法見正文。
1、創建庫文件
我 不知道怎么創建一個空的庫文件。好在這個功能好像不是很需要。通常人們使用“ar cru liba.a a.o"這樣的命令來創建一個庫並把a.o添加進去。"c"關鍵字告訴ar需要創建一個新庫文件,如果沒有指定這個標志則ar會創建一個文件,同時會給出 一個提示信息,"u"用來告訴ar如果a.o比庫中的同名成員要新,則用新的a.o替換原來的。但是我發現這個參數也是可有可無的,可能是不同版本的ar 行為不一樣吧。實際上用"ar -r liba.a a.o"在freebsd5上面始終可以成功。
2、加入新成員
使用"ar -r liba.a b.o"即可以將b.o加入到liba.a中。默認的加入方式為append,即加在庫的末尾。"r"關鍵字可以有三個修飾符"a", "b"和"i"。
- "a"表示after,即將新成員加在指定成員之后。例如"ar -ra a.c liba.a b.c"表示將b.c加入liba.a並放在已有成員a.c之后;
- "b"表示before,即將新成員加在指定成員之前。例如"ar -rb a.c liba.a b.c";
- "i"表示insert,跟"b"作用相同。
3、列出庫中已有成員
"ar -t liba.a"即可。如果加上"v"修飾符則會一並列出成員的日期等屬性。
4、刪除庫中成員
"ar -d liba.a a.c"表示從庫中刪除a.c成員。如果庫中沒有這個成員ar也不會給出提示。如果需要列出被刪除的成員或者成員不存在的信息,就加上"v"修飾符。
5、從庫中解出成員
"ar -x liba.a b.c"
6、調整庫中成員的順序
使用"m"關鍵字。與"r"關鍵字一樣,它也有3個修飾符"a","b", "i"。如果要將b.c移動到a.c之前,則使用"ar -mb a.c liba.a b.c"
//生成靜態庫文件
ar –rc test.a test.o