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

 

另外,在HP UNIX、aix和IBM UNIX也是用ar生成靜態庫的,其中, 在HP UNIX中生成64或者32位庫,加+DD64或+DD32。

在HP UNIX 中生成靜態庫需要加+z,這樣編譯的庫就可以被用來編譯動態庫啦,不然,是不可以的。

發佈了15 篇原創文章 · 獲贊 13 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章