linux 靜態庫 ar命令用法


當我們的程序中有經常使用的模塊,而且這種模塊在其他程序中也會用到,這時按照軟件重用的思想,我們應該將它們生成庫,使得以后編程可以減少開發代碼量。這里介紹命令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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM