> 技术文档 > Linux ar 命令详解:用于创建、修改和提取 归档文件(archive file) 的工具

Linux ar 命令详解:用于创建、修改和提取 归档文件(archive file) 的工具


Linux ar 命令详解


一、命令简介

ar(archive)命令是 Linux 和 Unix 系统中用于创建、修改和提取 归档文件(archive file) 的工具。它最常用于创建静态链接库(.a 文件),供编译器(如 gcc)链接使用。

归档文件是将多个文件(通常是目标文件 .o)合并为一个文件的一种方式,便于发布和链接。

ar 是构建 C/C++ 程序静态库不可或缺的工具。


二、命令语法
ar [选项][命令][修饰符] archive_name file...

例如:

ar rcs libhello.a hello.o

hello.o 添加(或更新)到名为 libhello.a 的静态库中。


三、常用命令选项(操作符)
命令字母 含义 说明 d 删除 从归档文件中删除指定文件 m 移动 移动归档文件内文件的位置 p 打印 将归档中文件内容输出到标准输出 q 快速追加 将文件快速追加到归档末尾,不检查重复 r 插入/替换 将文件插入归档文件,若存在则替换 t 列表 列出归档文件的内容 x 提取 从归档文件中提取指定文件或全部文件
四、常用修饰符(Modifers)
修饰符 含义 v 显示详细信息(verbose) c 创建归档文件,即使它尚不存在 s 建立归档文件索引(特别重要,用于静态库) u 仅替换比归档中旧的文件 N 后接数字,跳过前 N 个文件
五、使用方法详解
1. 创建静态库(.a 文件)
ar rcs libmath.a add.o sub.o mul.o

说明:

  • r: 插入(或替换)目标文件。

  • c: 如果库文件不存在则创建。

  • s: 添加符号索引(使链接器可用)。

  • libmath.a: 最终生成的静态库文件。

  • add.o sub.o mul.o: 要打包的目标文件。


2. 查看归档内容
ar t libmath.a

输出归档内的文件名列表。

v 查看详细:

ar tv libmath.a

3. 向现有归档中追加文件
ar r libmath.a div.o

div.o 插入到 libmath.a 中,如果已存在则替换。


4. 从归档中提取文件
ar x libmath.a sub.o

提取指定文件。

提取全部:

ar x libmath.a

5. 删除归档中的文件
ar d libmath.a sub.o

sub.olibmath.a 中移除。


6. 移动文件位置

mul.o 移动到 add.o 之后:

ar m libmath.a mul.o add.o

六、arnm, ranlib 的关系
  • ar 创建静态库(.a 文件)

  • nm 查看库中的符号信息

  • ranlib 为归档添加符号索引(现在等价于 ar s

示例:

ar rcs libhello.a hello.onm libhello.a

七、相关配置文件与路径
  • .a 文件常见于 /usr/lib/usr/local/lib 等系统库目录。

  • 使用 ldconfig, gcc -L/path -lxxx 连接这些库。


八、编译流程示例(结合 gcc)
  1. 编译源文件为目标文件:

gcc -c math.c -o math.o
  1. 使用 ar 创建静态库:

ar rcs libmath.a math.o
  1. 编译主程序并链接静态库:

gcc main.c -L. -lmath -o main

九、常见问题
问题 原因 解决方法 undefined reference to \'function\' 静态库中无符号索引 使用 ar sranlib 添加索引 no such file or directory 目标文件不存在 检查文件路径或先编译 .o 文件 .a 文件编译后未生效 库未链接 使用 -L 指定路径,-lxxx 链接库
十、总结
项目 内容 命令名 ar 全称 Archive 功能 创建/管理归档文件(静态库) 常用格式 .a 文件 常用选项 rcs, t, x, d 常见用途 为 C/C++ 程序创建静态库 替代工具 GNU libtool, llvm-ar(在 LLVM 中)

ar 是 C/C++ 编译和链接过程中不可缺少的工具。掌握它能帮助你更高效地组织代码模块、创建静态库,并理解编译器背后的运行机制。

这里是封面: