ar and tar
嗯,用户让我总结一下这篇文章的内容,控制在100字以内,而且不需要特定的开头。首先,我需要快速浏览文章内容,抓住主要点。 文章主要讲的是ar命令,它在Linux中的作用是将多个目标文件打包成静态库。和tar不同,ar专注于编译链接,不处理目录结构和权限。还有实际操作示例和安装方法。 接下来,我需要把这些信息浓缩到100字以内。要确保涵盖ar的功能、与tar的区别以及用途。同时保持语言简洁明了。 可能会这样组织:ar用于打包目标文件成静态库,与tar不同,专注于编译场景。简单明了地表达出来。 </think> ar 是 Linux 中用于将多个目标文件(.o)打包成静态库(.a)的工具,专为编译链接设计。与 tar 不同,ar 不处理目录结构或权限,仅关注高效归档和符号索引生成。 2026-4-18 05:30:31 Author: dyrnq.com(查看原文) 阅读量:57 收藏

在 current ar archive 这个语境下,ar 的含义非常直观:

ar 代表 “Archive”(归档/存档)

在 Linux/Unix 编程工具链中,ar 是一个标准的命令行工具,它的核心作用就是将多个文件(主要是 .o 目标文件)打包成一个单独的存档文件(即 .a 静态库文件)。


为什么需要 ar?

可以把 .o 文件看作是乐高积木的零件,而 .a 静态库就是“积木礼盒”。
* 如果有 100 个 .o 文件,分发给别人时,对方很难管理,也很容易丢。
* 使用 ar 命令,可以把这 100 个零件压缩进一个 .a 文件里,这样分发起来就非常方便。

ar 与 tar 的区别(常见误区)

很多人会疑惑,Linux 下已经有了 tar(Tape Archive),为什么还要有一个 ar?

特性 ar (Archive) tar (Tape Archive)
主要用途 专门为静态库设计 通用归档(备份、源码发布)
文件结构 极其简单,专门为了被链接器(Linker)快速读取而优化 包含复杂的文件系统元数据(权限、目录结构、符号链接)
对文件的处理 不包含子目录信息(通常是扁平的) 完整保留目录树和文件权限
典型场景 生成 .a 文件 压缩备份、分发安装包

ar 是一个“轻量级”的、专为编译链接场景定制的归档工具。它并不关心目录结构或权限,它只关心如何高效地把一堆二进制代码块(.o)粘在一起,以便于链接器(Linker)在编译时能快速扫描和提取其中的函数。

tar 在早期,计算机数据存储主要使用磁带作为介质,因此 Tape Archive 这个名字反映了当时的技术现状。

在 1979 年,tar 命令由 GNU 项目的创始人 Richard Stallman 创建,当时主要用于将多个文件打包成一个文件,以便于在磁带上存储和传输。

尽管现在的数据存储技术已经发展到可以使用硬盘、固态硬盘等更为先进的介质,但是 tar 命令仍然沿用了当时的名称。

所以,tar 文件中的 tar 是 Tape Archive 的缩写,而不是磁带的意思。它只是一个历史遗留名称,代表了一种打包和归档文件的方式。

jar 文件中的 jar 是 Java ARchive 的缩写。

在 Java 语言中,jar 文件是一种用于打包 Java 类文件、资源文件和其他相关文件的文件格式。

jar 文件是在 1995 年由 Sun Microsystems(现为 Oracle 公司)引入的,用于将 Java 类文件和其他资源文件打包成一个文件,以便于在 Java 虚拟机(JVM)上运行。

jar 文件实际上是一种压缩文件,使用 ZIP 格式进行压缩和存储。因此,jar 文件可以被视为一种特殊的 ZIP 文件。

在 jar 文件中,ar 是 archive 的缩写,而不是指代其他含义。

rar 文件格式中的第一个 R 表示 Roshal,这是该文件格式的创造者 Eugene Roshal 的姓氏。

rar 文件格式是一种压缩文件格式,由 Eugene Roshal 在 1993 年创建。rar 文件格式在 Windows 平台上非常流行,广泛用于压缩和归档文件。

rar 文件格式中的 R 表示 Roshal 的姓氏,而 ar 则表示 Archive(归档)。

所以,rar 文件格式的全称是 Roshal ARchive。

实际操作示例

当运行 ar rcs libmylib.a file1.o file2.o 时:
* r (Replace/Insert):如果有同名文件,替换它;如果没有,添加它。
* c (Create):如果目标库不存在,自动创建它。
* s (Symbol index):这最重要。它会在库里创建一个“符号索引表”(类似于书的目录),让链接器在寻找函数时,不需要逐个扫描文件,直接通过索引就能定位函数位置,极大提升了链接速度。

所以,ar 就是那个负责把散落的零件(.o)“打包并编目录”的工具,最终产物就是静态库(.a)。

ar 命令通常包含在 binutils (Binary Utilities) 这个软件包中。

在 Linux 世界中,binutils 是开发和系统管理中最基础的工具包之一。它几乎在所有 Linux 发行版中都是预装的,因为它是编译环境(如 GCC)的必要依赖。

发行版系列 安装命令
Debian / Ubuntu / Kali sudo apt update && sudo apt install binutils
RHEL / CentOS / Fedora / openEuler sudo dnf install binutils
Arch Linux sudo pacman -S binutils
ar --help
Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
       ar -M [<mri-script]
 commands:
  d            - delete file(s) from the archive
  m[ab]        - move file(s) in the archive
  p            - print file(s) found in the archive
  q[f]         - quick append file(s) to the archive
  r[ab][f][u]  - replace existing or insert new file(s) into the archive
  s            - act as ranlib
  t[O][v]      - display contents of the archive
  x[o]         - extract file(s) from the archive
 command specific modifiers:
  [a]          - put file(s) after [member-name]
  [b]          - put file(s) before [member-name] (same as [i])
  [D]          - use zero for timestamps and uids/gids (default)
  [U]          - use actual timestamps and uids/gids
  [N]          - use instance [count] of name
  [f]          - truncate inserted file names
  [P]          - use full path names when matching
  [o]          - preserve original dates
  [O]          - display offsets of files in the archive
  [u]          - only replace files that are newer than current archive contents
 generic modifiers:
  [c]          - do not warn if the library had to be created
  [s]          - create an archive index (cf. ranlib)
  [l <text> ]  - specify the dependencies of this library
  [S]          - do not build a symbol table
  [T]          - deprecated, use --thin instead
  [v]          - be verbose
  [V]          - display the version number
  @<file>      - read options from <file>
  --target=BFDNAME - specify the target object format as BFDNAME
  --output=DIRNAME - specify the output directory for extraction operations
  --record-libdeps=<text> - specify the dependencies of this library
  --thin       - make a thin archive
 optional:
  --plugin <p> - load the specified plugin
 emulation options: 
  No emulation specific options
ar: supported targets: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 pei-i386 pe-x86-64 pei-x86-64 elf64-little elf64-big elf32-little elf32-big pe-bigobj-x86-64 pe-i386 pdb srec symbolsrec verilog tekhex binary ihex plugin
Report bugs to <https://gitlab.alpinelinux.org/alpine/aports/-/issues>
ar --help
Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
       ar -M [<mri-script]
 commands:
  d            - delete file(s) from the archive
  m[ab]        - move file(s) in the archive
  p            - print file(s) found in the archive
  q[f]         - quick append file(s) to the archive
  r[ab][f][u]  - replace existing or insert new file(s) into the archive
  s            - act as ranlib
  t[O][v]      - display contents of the archive
  x[o]         - extract file(s) from the archive
 command specific modifiers:
  [a]          - put file(s) after [member-name]
  [b]          - put file(s) before [member-name] (same as [i])
  [D]          - use zero for timestamps and uids/gids (default)
  [U]          - use actual timestamps and uids/gids
  [N]          - use instance [count] of name
  [f]          - truncate inserted file names
  [P]          - use full path names when matching
  [o]          - preserve original dates
  [O]          - display offsets of files in the archive
  [u]          - only replace files that are newer than current archive contents
 generic modifiers:
  [c]          - do not warn if the library had to be created
  [s]          - create an archive index (cf. ranlib)
  [l <text> ]  - specify the dependencies of this library
  [S]          - do not build a symbol table
  [T]          - deprecated, use --thin instead
  [v]          - be verbose
  [V]          - display the version number
  @<file>      - read options from <file>
  --target=BFDNAME - specify the target object format as BFDNAME
  --output=DIRNAME - specify the output directory for extraction operations
  --record-libdeps=<text> - specify the dependencies of this library
  --thin       - make a thin archive
 optional:
  --plugin <p> - load the specified plugin
 emulation options: 
  No emulation specific options
ar: supported targets: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 pei-i386 pe-x86-64 pei-x86-64 elf64-little elf64-big elf32-little elf32-big pe-bigobj-x86-64 pe-i386 pdb srec symbolsrec verilog tekhex binary ihex plugin
Report bugs to <https://sourceware.org/bugzilla/>

文章来源: https://dyrnq.com/ar-and-tar/
如有侵权请联系:admin#unsafe.sh