ar命令詳解


ar 命令

 

用途

 

維護鏈接編輯器使用的索引庫。

語法

 

ar [  -c ] [  -l ] [  -g | -o ] [  -s ] [  -v ] [  -C ] [  -T ] [  -z ] {  -h |  -p |  -t |  -x } [  -X  {32|64|32_64}] ArchiveFile [ File ... ]

 

ar [  -c ] [  -l ] [  -g | -o ] [  -s ] [  -v ] [  -C ] [  -T ] [  -z ] {  -m |  -r [  -u ] } [ {  -a |  -b |  -i }  PositionName  ] [  -X  {32|64|32_64}]   ArchiveFile File ...

 

ar [  -c ] [  -l ] [  -g | -o ] [  -s ] [  -v ] [  -C ] [  -T ] [  -z ] {  -d |  -q } [  -X  {32|64|32_64}] ArchiveFile File ...

 

ar [  -c ] [  -l ] [  -v ] [  -C ] [  -T ] [  -z ] {  -g | -o |  -s |  -w } [  -X  {32|64|32_64}] ArchiveFile

描述

 

ar 命令維護鏈接編輯器使用的索引庫。ar 命令將一個或多個指定的文件並入單個寫成 ar 壓縮文檔格式的壓縮文檔文件。當 ar 命令創建庫時,它創建可傳輸格式的報頭;當它創建或更新庫時,它重建符號表。有關格式和索引壓縮文檔和符號表的結構的信息,請參閱 ar 文件格式條目。

 

ar 命令識別兩種文件格式。“大壓縮文檔格式”ar_big,是缺省文件格式並支持 32 位和 64 位目標文件。“小壓縮文檔格式”可用於創建在比 AIX 4.3 更老的版本上可識別的壓縮文檔,請參閱 -g 標志。如果將一個 64 位的對象添加到小格式壓縮文檔,除非指定了 -g,否則 ar 首先將它轉換為大格式。缺省情況下,ar 僅處理 32 位目標文件;壓縮文檔中任何 64 位目標文件在沒有提示的情況下被忽略。要更改此行為,請使用 -X 標志或設置 OBJECT_MODE 環境變量。

標志

 

在 ar 命令中,可以從集 cClosTv 中指定任何數量的可選標志。必須從標志集 dhmopqrstwx 中指定一個標志。如果選擇 -m 或 -r 標志,您可能還要指定一個位置標志(-a、-b 或 -i);對於 -a、-b 或 -i 標志,您必須還指定在 ArchiveFile(PositionName)中一個文件的名稱,此名稱緊跟在標志列表后,並由空格隔開。

-a PositionName     在 PositionName 參數標識的現有文件后安置指定的文件。

-b PositionName     在 PositionName 參數標識的現有文件前安置指定的文件。

-c     禁止在創建庫時產生的正常消息。

-C     阻止解壓縮的文件替換文件系統中同名的文件。

-d     從庫中刪除指定的文件。

-g     對壓縮文檔成員進行排序以確保用最小數量的未用空間獲得最大的加載效率。在幾乎所有情況下,-g 標志以壓縮文檔成員的邏輯鏈接順序物理地安置它們。最終生成的壓縮文檔通常寫成小格式,這樣該標志可用來將大格式壓縮文檔轉換成小格式壓縮文檔。包含 64 位 XCOFF 對象的壓縮文檔不能創建成或轉換至小格式。

-h     將指定的文件的成員報頭中的修改時間設置為當前日期和時間。如果不指定任何文件名稱,則 ar 命令設置所有成員報頭的時間戳記。此標志不能和 -z 標志一起使用。

-i PositionName     在 PositionName 參數標識的現有文件前安置指定的文件(和 -b 相同)。

-l     將臨時文件置於當前(本地)目錄中,而非 TMPDIR 目錄中(缺省為 /tmp)。

-m     將指定的文件移動到庫中的某個其它位置。缺省情況下,它將指定的文件移動到庫的末尾。使用位置標志(abi)來指定某個其它位置。

-o     對壓縮文檔成員進行排序以確保用最小數量的未用空間獲得最大的加載效率。在幾乎所有情況下,-o 標志以壓縮文檔成員的邏輯鏈接順序物理地安置它們。最終生成的壓縮文檔通常寫成大格式,這樣該標志可用來將小格式壓縮文檔轉換成大格式壓縮文檔。

-p     將 Files 參數中指定的文件的內容或在 ArchiveFile 參數中指定的所有文件(如果您不指定任何文件)都寫至標准輸出。

-q     將指定的文件添加到庫的末尾。另外,如果指定同一個文件兩次,它可能被放入庫中兩次。

-r     如果指定的文件已經存在於庫中,則替換它。因為指定的文件在庫中占據它們替換的文件的同一個位置,位置標志沒有任何附加的影響。當和 -u 標志(更新)一起使用時,-r 標志僅替換自從最后一次添加到庫中以后修改的文件。

 

如果指定的文件不存在於庫中,則 ar 命令添加它。在這種情況下,位置標志影響放置。如果不指定位置,則將新文件置於庫的末尾。如果指定同一個文件兩次,它可能被放入庫中兩次。

-s     無論 ar 命令是否修改了庫內容都強制重新生成庫符號表。請在庫上使用 strip 命令之后,使用此標志來恢復庫符號表。

-t     將庫的目錄寫至標准輸出。如果指定文件名稱,則僅顯示指定的那些文件。如果不指定任何文件,-t 標志列出庫中的所有文件。

-T     如果壓縮文檔成員名稱比文件系統支持的長,則允許文件名稱截短。此選項無效,因為文件系統支持的名稱長度等於 255 個字符的最大壓縮文檔成員名稱。

-u     僅復制自它們最后一次復制起更改的文件(請參閱先前討論過的 -r 標志)。

-v     將建立新庫的詳細的逐個文件的描述寫至標准輸出。當和 -t 標志一起使用時,它給出類似於 ls -l 命令給出的長列表。當和 -x 標志一起使用時,它在每個文件前加一個名稱。當和 -h 標志一起使用,它列出成員名稱和更新的修改時間。

-w     顯示壓縮文檔符號表。每個符號和其中定義此符號的文件的名稱一起列出。

-x     通過將指定的文件復制到當前目錄來解壓縮它們。這些副本和原始文件(保留在庫中)具有相同的名稱。如果不指定任何文件,-x 標志復制庫中的所有文件。此過程不會更改庫。

-X mode     指定 ar 應檢查的目標文件的類型。mode 必須是以下項之一:

 

32

    僅處理 32 位目標文件

64

    僅處理 64 位目標文件

32_64

    處理 32 位 和 64 位目標文件

 

缺省值是處理 32 位目標文件(忽略 64 位對象)。mode 還可以用 OBJECT_MODE 環境變量來設置。例如,OBJECT_MODE=64 使 ar 處理任何 64 位對象並忽略 32 位對象。-X 標志覆蓋 OBJECT_MODE 變量。

-z     創建壓縮文檔的臨時副本並對副本執行所有要求的修改。當所有操作成功完成時,壓縮文檔的工作副本覆蓋原始副本。此標志不能和 -h 標志一起使用。

ArchiveFile     指定壓縮文檔文件名稱;必需。

MemberName ...     各壓縮文檔成員的名稱。

退出狀態

 

該命令返回以下出口值:

0     成功完成。

>0     發生錯誤。

示例

 

   1. 要創建一個庫,請輸入:

 

      ar -v -q lib.a strlen.o strcpy.o

 

      如果 lib.a 庫不存在,則此命令創建它,並將文件 strlen.o 和 strcpy.o 的副本輸入其中。如果 lib.a 庫存在,則此命令在不檢查相同成員的情況下,將新的成員添加到末尾。v 標志設置詳細方式,在此方式中 ar 命令在其進行時顯示進程報告。

   2. 要顯示庫的目錄,請輸入:

 

      ar -v -t lib.a

 

      此命令列出了 lib.a 庫的目錄,顯示類似於 ls -l 命令的輸出的長列表。要只列出成員文件名稱,則省略 -v 標志。

   3. 要替換或添加新成員到庫中,請輸入:

 

      ar -v -r lib.a strlen.o strcat.o

 

      此命令替換成員 strlen.o 和 strcat.o。如果 lib.a 如示例 1 中顯示的那樣創建,則替換 strlen.o 成員。因為不存在名為 strcat.o 的成員,所以它被添加到庫的末尾。

   4. 要指定在何處插入新成員,請輸入:

 

      ar -v -r -b strlen.o lib.a strcmp.o

 

      此命令添加 strcmp.o 文件,並將該新成員置於 strlen.o 成員之前。

   5. 要更新一個已經更改過的成員,請輸入:

 

      ar -v -r -u lib.a strcpy.o

 

      此命令替換現有 strcpy.o 成員,但僅當文件 strcpy.o 自從最后一次添加到庫后已經修改時才替換它。

   6. 要更改庫成員的順序,請輸入:

 

      ar -v -m -a strcmp.o lib.a strcat.o strcpy.o

 

      此命令將成員 strcat.o 和 strcpy.o 移動到緊跟在 strcmp.o 成員之后的位置。保留 strcat.o 和 strcpy.o 成員的相對順序。換句話說,如果在移動之前 strcpy.o 成員在 strcat.o 成員之前,那么(移動后)它依舊如此。

   7. 要解壓縮庫成員,請輸入:

 

      ar -v -x lib.a strcat.o strcpy.o

 

      此命令將成員 strcat.o 和 strcpy.o 分別復制到名為 strcat.o 和 strcpy.o 的文件。

   8. 要解壓縮並重命名一個成員,請輸入:

 

      ar -p lib.a strcpy.o >stringcopy.o

 

      此命令將成員 strcpy.o 復制到一個名為 stringcopy.o 的文件。

   9. 要刪除一個成員,請輸入:

 

      ar -v -d lib.a strlen.o

 

      此命令從 lib.a 庫中刪除成員 strlen.o。

  10. 要從多個用 ld 命令創建的共享模塊中創建一個壓縮文檔庫,請輸入:

 

      ar -r -v libshr.a shrsub.o shrsub2.o shrsub3.o ...

 

      此命令從名為 shrsub.o、shrsub2.o、shrsub3.o 等等的共享模塊中創建名為 libshr.a 的壓縮文檔庫。要編譯並鏈接使用 libshr.a 壓縮文檔庫的 main 程序,請使用以下命令:

 

      cc -o main main.c -L/u/sharedlib -lshr

 

      main 程序現在是可執行的。main 程序引用的任何符號(包含在libshr.a 壓縮文檔庫中)已經因延遲分辨率而作了標記。-l 標志指定應在 libshr.a 庫中搜索這些符號。

  11. 要列出 lib.a 的內容(忽略任何 32 位目標文件),請輸入:

 

      ar -X64 -t -v lib.a

 

  12. 要從 lib.a 解壓縮所有 32 位的目標文件,請輸入:

 

      ar -X32 -x lib.a

 

  13. 要列出 lib.a 中的所有文件,無論是 32 位、64 位或非對象,請輸入:

 

      ar -X32_64 -t -v lib.a


免責聲明!

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



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