fbpx
维基百科

ar (Unix)

ararchiver)是Unix系统上的归档工具,用于将多个文件归档为一个文件。ar目前一般仅被链接器用创建更新静态库和生成.deb包。它的归档功能现在基本被 tar所取代。[3] GNU Binutils包含ar .[2]

ar
原作者肯·汤普逊 丹尼斯·里奇贝尔实验室
開發者各类开源和商业软件开发者。
首次发布1971年11月3日,​52年前​(1971-11-03
操作系统Unix, 类Unix系统, V, Plan 9, Inferno
系統平台跨平臺
类型命令
archiver
扩展名
.a, .lib, .ar[1]
互联网媒体类型
application/x-archive[1]
格式类型归档格式
作为容器一般是 目标文件 (.o, .obj)
标准未标准化,有多种形式
免费格式?[2]

Linux标准规范(LSB)中,ar 已被弃用,并可能在将来的版本中移除,理由是LSB不应包含软件开发工具和指定.o和.a文件格式。[4]

文件格式 编辑

 
.deb文件结构示例

ar格式从未标准化过,历史上有过多种形式[5]V6, V7, AIX和Coherent等,与通用格式都有很大的差别。[6]现在的通用格式主要基于两种变体:BSDSystem V(最初称为 COFF,也被 GNUELFWindows使用。)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 用 "/" 文件名表示对应的数据为符号查找表,包含三部分,并存储为连续的数据。

  1. 一个32位整数大端存储:符号表的条目数。
  2. 一组32位整数,大端存储:每个表示该符号在归档中的位置。
  3. 一组字符串,0结尾:符号名称

有些 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. ^ 1.0 1.1 . [2019-03-11]. (原始内容存档于2019-12-08). 
  2. ^ 2.0 2.1 . [3 October 2013]. (原始内容存档于2019-02-12). 
  3. ^ . TLDP. [3 October 2013]. (原始内容存档于2013-07-03). 
  4. ^ Linux Standard Base Core Specification, version 4.1, Chapter 15. Commands and Utilities > ar (页面存档备份,存于互联网档案馆
  5. ^ 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. ^ 6.0 6.1 . [2020-09-22]. (原始内容存档于2017-08-22). 
  7. ^ ar.h. www.unix.com. The UNIX and Linux Forums. 
  8. ^ . GitHub. [2020-09-22]. (原始内容存档于2021-03-05) (英语). 
  9. ^ ar – 参考,单一UNIX®规范第7期,由國際開放標準組織发布
  10. ^ . [2020-09-22]. (原始内容存档于2021-02-26). 
  11. ^ . [2020-09-22]. (原始内容存档于2021-02-25). 
  12. ^ . opensource.apple.com. [2020-09-22]. (原始内容存档于2021-02-27). 
  13. ^ ar(5) – FreeBSD文件格式(File Formats)手册页
  14. ^ . docs.oracle.com. Oracle Corporation. 11 November 2014 [2018-11-14]. (原始内容存档于2021-03-03). 
  15. ^ Pietrek, Matt, , Microsoft Systems Journal, April 1998 [2014-08-23], (原始内容存档于2007-06-24) 
  16. ^ . GitHub. [10 February 2020]. (原始内容存档于2021-02-28) (英语). 
  17. ^ . GNU Binary Utilities. [2020-09-22]. (原始内容存档于2021-04-18). 

外部链接 编辑

  • ar: create and maintain library archives – 命令与工具(Commands & Utilities)参考,单一UNIX®规范第7期,由國際開放標準組織发布
  • ar(1) – Plan 9通用命令(General Commands)手册页
  • ar(1) – Inferno通用命令(General Commands)手册页
  • ar(1) – Linux用户命令(User Commands)手册页
  • ar(1) – FreeBSD通用命令(General Commands)手册页
  • ar(1) – Version 7 Unix Programmer's Manual
  • ar(5) – 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 (devresource.hp.com)

unix, archiver, 是unix系统上的归档工具, 用于将多个文件归档为一个文件, ar目前一般仅被链接器用创建更新静态库和生成, deb包, 它的归档功能现在基本被, href, html, title, 所取代, binutils包含ar, ar原作者肯, 汤普逊, 丹尼斯, 里奇, 贝尔实验室, 開發者各类开源和商业软件开发者, 首次发布1971年11月3日, 52年前, 1971, 操作系统unix, 类unix系统, plan, inferno系統平台跨平臺类型命令archiver扩展名, 互联. ar archiver 是Unix系统上的归档工具 用于将多个文件归档为一个文件 ar目前一般仅被链接器用创建更新静态库和生成 deb包 它的归档功能现在基本被 a href Tar html title Tar tar a 所取代 3 GNU Binutils包含ar 2 ar原作者肯 汤普逊 丹尼斯 里奇 贝尔实验室 開發者各类开源和商业软件开发者 首次发布1971年11月3日 52年前 1971 11 03 操作系统Unix 类Unix系统 V Plan 9 Inferno系統平台跨平臺类型命令archiver扩展名 a lib ar 1 互联网 媒体类型application x archive 1 格式类型归档格式作为容器一般是 目标文件 o obj 标准未标准化 有多种形式免费格式 是 2 Linux标准规范 LSB 中 ar 已被弃用 并可能在将来的版本中移除 理由是LSB不应包含软件开发工具和指定 o和 a文件格式 4 目录 1 文件格式 1 1 特征签名 1 2 文件头 1 2 1 BSD变体 1 2 2 System V 或 GNU 变体 1 2 2 1 Windows 变体 1 3 Thin archive 2 参见 3 参考 4 外部链接文件格式 编辑 nbsp deb文件结构示例ar格式从未标准化过 历史上有过多种形式 5 如 V6 V7 AIX和Coherent等 与通用格式都有很大的差别 6 现在的通用格式主要基于两种变体 BSD 和 System V 最初称为 COFF 也被 GNU ELF和Windows使用 Debian的 deb 使用通用格式 ar文件起始是一个全局文件头 接着是各个文件的文件头和数据部分 数据部分为2字节对齐 如果数据长度为奇数 则填充一个换行符 n 0x0A 特征签名 编辑 为 lt arch gt 和换行符 0x0A 文件头 编辑 归档的每个文件包含文件头存储文件信息 下表为通用格式 数值为ASCII编码 并用空格 0x20 向右填充 偏移 长度 名称 各式0 16 文件标识符 ASCII16 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 用 文件名表示对应的数据为符号查找表 包含三部分 并存储为连续的数据 一个32位整数 大端存储 符号表的条目数 一组32位整数 大端存储 每个表示该符号在归档中的位置 一组字符串 0结尾 符号名称有些 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 格式 特征签名为 lt thin gt 仅包含符号表和对该文件的引用 17 参见 编辑Deb 归档格式 Unix实用程序列表参考 编辑 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 gt 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 英语 ar 参考 单一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 ar 5 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 外部链接 编辑維基教科書中的相關電子教程 Commandsar create and maintain library archives 命令与工具 Commands amp Utilities 参考 单一UNIX 规范第7期 由國際開放標準組織发布 ar 1 Plan 9通用命令 General Commands 手册页 ar 1 Inferno通用命令 General Commands 手册页 ar 1 Linux用户命令 User Commands 手册页 ar 1 FreeBSD通用命令 General Commands 手册页 ar 1 Version 7 Unix Programmer s Manual ar 5 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 取自 https zh wikipedia org w index php title Ar Unix amp oldid 78903938, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。