ar (Unix)
ar(archiver)是Unix系統上的歸檔工具,用於將多個檔案歸檔為一個檔案。ar
目前一般僅被連結器用建立更新靜態庫和生成.deb包。它的歸檔功能現在基本被 tar
所取代。[3] GNU Binutils包含ar
.[2]
原作者 | 肯·湯普遜 丹尼斯·里奇 (貝爾實驗室) |
---|---|
開發者 | 各類開源和商業軟件開發者。 |
首次發佈 | 1971年11月3日 |
作業系統 | Unix, 類Unix系統, V, Plan 9, Inferno |
平台 | 跨平臺 |
類型 | 命令 |
副檔名 | |
---|---|
網路媒體型式 |
application/x-archive[1] |
格式類型 | 歸檔格式 |
作為容器 | 一般是 目標文件 (.o , .obj ) |
標準 | 未標準化,有多種形式 |
免費格式? | 是[2] |
Linux標準規範(LSB)中,ar
已被棄用,並可能在將來的版本中移除,理由是LSB不應包含軟件開發工具和指定.o和.a檔案格式。[4]
檔案格式
ar格式從未標準化過,歷史上有過多種形式[5] 如 V6, V7, AIX和Coherent等,與通用格式都有很大的差別。[6]現在的通用格式主要基於兩種變體:BSD 和 System V(最初稱為 COFF,也被 GNU, ELF和Windows使用。)Debian的 ".deb" 使用通用格式。
.ar檔案起始是一個全域檔案頭,接着是各個檔案的檔案頭和數據部分。數據部分為2位元組對齊,如果數據長度為奇數,則填充一個換行符(\n,0x0A)。
特徵簽章
為 "!<arch>"
和換行符(0x0A).
檔案頭
歸檔的每個檔案包含檔案頭儲存檔案資訊。下表為通用格式。數值為ASCII編碼,並用空格(0x20)向右填充。
偏移 | 長度 | 名稱 | 各式 |
---|---|---|---|
0 | 16 | 檔案識別碼 | ASCII |
16 | 12 | 檔案修改時間 | 十進制 |
28 | 6 | 所有者ID | 十進制 |
34 | 6 | 組ID | 十進制 |
40 | 8 | 檔案模式 | 八進制 |
48 | 10 | 檔案大小位元組數 | 十進制 |
58 | 2 | 結束字元 | 0x60 0x0A |
檔頭全部為可列印的ASCII字元和換行符,所以只包含文字檔案的ar歸檔檔案仍然是文字檔案。
每個檔案從偶數位元組開始,如果長度為奇數,則需要填充一個換行符,檔案頭中的檔案大小儲存是實際大小。[7]
由於檔名長度和格式的限制,GNU和BSD變體都設計了不同的儲存長檔名的方法。儘管通用格式不會受到2038年問題的困擾,但很多系統上的ar程式存在這種問題,可能需要修改以正確處理超過2147483647的時間戳。有關這些擴充的說明,請參見libbfd。[8]
根據格式的不同,許多ar實現了用於快速連結的全域符號表(armap,目錄或索引)而無需掃描整個存檔中的符號。POSIX辨識此功能,並且要求ar實現具有 -s
選項更新符號表。大多數實現將其放在第一個檔案條目中。[9]
BSD變體
BSD ar 在檔名頭填充ASCII空格符,檔名如包含空格會有問題。4.4BSD ar將"#1/"和檔名長度放置在檔案名字段,並將檔名放置在數據段的最前面[6]
BSD ar 自身不處理全域符號尋找表,而使用單獨的工具ranlib[10]。ranlib會插入一個與系統架構相關的檔案 __.SYMDEF
作為第一個檔案[11] 一些後來的版本會在名稱後面放置一個空格和"SORTED"字元表示已排序。[12] Darwin 64位元系統使用__.SYMDEF_64
。
由於POSIX規範要求-s
選項,新的BSD ar 重新實現了該要求。FreeBSD 棄用了 SYMDEF 表而採用 System V 類型的尋找表。[13]
System V(或 GNU)變體
System V ar 用字元'/'(0x2F)標記檔名結束,從而檔名可以使用空格。需要擴充的檔案將檔名儲存在"//"檔案的數據段,在檔頭檔案名字段中寫入'/'和十進制的偏移地址。 "//"檔案包含的是長檔名列表,以換行符分割。通常 "//" 是第二個條目,符號表為第一個條目。
System V ar 用 "/" 檔名表示對應的數據為符號尋找表,包含三部分,並儲存為連續的數據。
有些 System V ar不使用上述各式,如HP-UX 11.0,上述資訊儲存為 SOM檔案格式。
為解決4GiB檔案限制,某些系統如Solaris 11.2 和 GNU使用不同的尋找表。不同之處在於使用64位元整數和用"/SYM64/"代替"/"[14]
Windows 變體
Windows的PE/COFF格式基於 System V/GNU。 第一個條目為 "/" 與System V/GNU符號表相同。第二個條目也是"/",使用小端整數,表示ECOFF擴充,用於儲存經過排序的符號交叉參照表。 [5][15] 第三個條目為 "//" 長檔名數據。[16]
Thin archive
GNU binutils和elfutils中的 ar
有一個 "thin archive" 格式,特徵簽章為 !<thin>
,僅包含符號表和對該檔案的參照。[17]
參見
參考
- ^ 1.0 1.1 application/x-archive. [2019-03-11]. (原始內容存檔於2019-12-08).
- ^ 2.0 2.1 ar(1) - Linux man page. [3 October 2013]. (原始內容存檔於2019-02-12).
- ^ Static Libraries. TLDP. [3 October 2013]. (原始內容存檔於2013-07-03).
- ^ Linux Standard Base Core Specification, version 4.1, Chapter 15. Commands and Utilities > ar (頁面存檔備份,存於互聯網檔案館)
- ^ 5.0 5.1 Levine, John R. Chapter 6: Libraries. Linkers and Loaders. The Morgan Kaufmann Series in Software Engineering and Programming 1. San Francisco, USA: Morgan Kaufmann. 2000 [October 1999] [2020-01-12]. ISBN 1-55860-496-0. OCLC 42413382. ISBN 978-1-55860-496-4. (原始內容存檔於2012-12-05). Code: [1][2] Errata: [3] (頁面存檔備份,存於互聯網檔案館)
- ^ 6.0 6.1 Manual page for NET/2 ar file format. [2020-09-22]. (原始內容存檔於2017-08-22).
- ^ ar.h. www.unix.com. The UNIX and Linux Forums.
- ^ bminor/binutils-gdb: archive.c. GitHub. [2020-09-22]. (原始內容存檔於2021-03-05) (英語).
- ^ 單一UNIX®規範第7期,由國際開放標準組織發佈 – 參考,
- ^ Manual page for NET/2 ranlib utility. [2020-09-22]. (原始內容存檔於2021-02-26).
- ^ Manual page for NET/2 ranlib file format. [2020-09-22]. (原始內容存檔於2021-02-25).
- ^ ranlib.h. opensource.apple.com. [2020-09-22]. (原始內容存檔於2021-02-27).
- ^ FreeBSD檔案格式(File Formats)手冊頁 –
- ^ ar.h(3HEAD). docs.oracle.com. Oracle Corporation. 11 November 2014 [2018-11-14]. (原始內容存檔於2021-03-03).
- ^ Pietrek, Matt, Under The Hood, Microsoft Systems Journal, April 1998 [2014-08-23], (原始內容存檔於2007-06-24)
- ^ llvm-mirror/llvm: archive.cpp (format detection). GitHub. [10 February 2020]. (原始內容存檔於2021-02-28) (英語).
- ^ ar. GNU Binary Utilities. [2020-09-22]. (原始內容存檔於2021-04-18).
外部連結
- 單一UNIX®規範第7期,由國際開放標準組織發佈 : create and maintain library archives – 命令與工具(Commands & Utilities)參考,
- Plan 9通用命令(General Commands)手冊頁 –
- Inferno通用命令(General Commands)手冊頁 –
- Linux用戶命令(User Commands)手冊頁 –
- FreeBSD通用命令(General Commands)手冊頁 –
- Version 7 Unix Programmer's Manual –
- FreeBSD檔案格式(File Formats)手冊頁 -- an account of Unix formats –
- The 32-bit PA-RISC Run-time Architecture Document, HP-UX 11.0 Version 1.0, Hewlett-Packard, 1997.
See Chapter 4: Relocatable Libraries. Available at [4] (devresource.hp.com)