
静态库是一种独立的文件,其中包含了按照特定结构组织起来的多个成员文件(通常是编译后的目标文件,即`.o`文件)
这些成员文件保留了它们原始的内容、访问模式、时间戳、属主和组等属性
在软件开发过程中,静态库极大地简化了链接过程,提高了代码的重用性和模块化
`ar`命令不仅允许用户添加、删除和提取库中的成员文件,还允许调整成员的顺序
成员的顺序在某些情况下至关重要,特别是在库中有多个模块具有相同符号定义(如函数定义)时
本文将详细介绍如何使用`ar`命令来管理静态库成员的顺序及相关操作
`ar`命令的基本语法
`ar`命令的基本语法如下:
ar 【--plugin
- `
- `【abcDfilNoPsSTuUvV】`为修饰选项,用来修饰操作选项,与操作选项配合使用时,二者的顺序可以任意
- `【relpos】`表示库中的成员名,用于加入新文件时指定相对位置,与选项`a`、`b`和`i`结合使用
- `【count】`表示在库中有多个同名的成员时,指定提取或删除的个数
- `【archive】`为库名称
- `【member...】`为库的成员名称
操作选项详解
1.d:Delete,从库中删除由`【member...】`指定的模块 如果使用了修饰选项`v`,则列出被删除的每个模块
2.m:Move,在一个库中移动成员 当库中有若干模块有相同的符号定义时,成员的位置顺序很重要 如果没有指定任选项,任何指定的成员将移到库的最后 也可以使用`a`、`b`或`i`选项指定移动到的位置
3.p:Print,显示库中指定的成员到标准输出 如果指定修饰选项`v`,则在输出成员的内容前,将显示成员的名字 如果没有指定成员的名字,所有库中的文件将显示出来
4.q:Quick append,快速追加 增加新模块到库的结尾处,并不检查是否需要替换 `a`、`b`或`i`修饰选项对此操作没有影响,模块总是追加到库的结尾处 如果使用了修饰选项`v`,则列出每个模块 这时,库的符号表没有更新,可以用`ar s`或`ranlib`来更新库的符号表索引
5.r:Replacement,以替换模式向库中插入成员 当插入的模块名已经在库中存在时,则替换同名的模块 默认情况下,新的成员增加在库的结尾处,可以使用其他任选项`a`、`b`或`i`来改变增加的位置
6.s:写入一个目标文件索引到库中,或者更新一个存在的目标文件索引 对一个库做`ar s`等同于对该库做`ranlib`
7.t:Table,显示库的模块表清单 如果指定文件名称,则仅显示指定的那些文件 如果不指定任何文件,则列出库中的所有文件 一般只显示模块名,如果结合选项`v`,可显示文件的访问权限、时间戳、属主和组等信息
8.x:eXtract,从库中提取一个成员 如果不指定要提取的模块,则提取库中所有的模块
修饰选项详解
1.a:After,在库的一个已经存在的成员后面增加一个新的文件 已经存在的成员由`relpos`参数指定
2.b:Before,在库的一个已经存在的成员前面增加一个新的文件 已经存在的成员由`relpos`参数指定
3.c:Create,创建一个库 不管库是否存在,都将创建
4.f:在库中截短指定的名字 缺省情况下,文件名的长度是不受限制的,可以使用此参数将文件名截短,以保证与其他系统的兼容
5.i:Insert,在库中一个已经存在的成员前面增加一个新的文件(类似选项`b`) 已经存在的成员由`relpos`参数指定
6.N:与count参数一起使用,在库中有多个相同的文件名时指定提取或删除的个数
7.o:Original,当提取成员时,保留成员的原始数据 如果不指定该选项,则提取出的模块的时间将标为提取出的时间
8.P:进行文件名匹配时使用全路径名 ar在创建库时不能使用全路径名(这样的库文件不符合POSIX标准),但是有些工具可以 此选项将导致GNU`ar`使用完整的路径名匹配文件名,这在从另一个工具创建的存档中提取单个文件时非常方便
9.S:不创建目标文件索引,这在创建较大的库时能加快时间
10. u:一般来说,命令ar r member...插入所有列出的文件到库中,如果只想插入列出文件中那些比库中同名文件新的文件,可以使用该选项 该选项只与`r`操作选项一起使用
11. v:用来显示执行操作选项的附加信息
12. V:显示ar的版本信息
常用示例
1.创建一个静态库
bash
ar crv libtest.a hello.o dablelv.o
这个命令将`hello.o`和`dablelv.o`文件打包成一个名为`libtest.a`的静态库,并显示详细信息
2.从静态库中提取指定目标文件
bash
ar x /usr/lib64/libc.a errno.o
这个命令从`/usr/lib64/libc.a`静态库中提取`errno.o`文件
3.查看静态库中指定目标文件的详细信息
bash
ar tv /usr/lib64/libc.a errno.o
这个命令显示`/usr/lib64/libc.a`静态库中`errno.o`文件的详细信息,包括权限、属主、组、时间戳等
4.从静态库中删除一个成员
bash
ar dv libc.a strlen.o
这个命令从`libc.a`静态库中删除`strlen.o`文件 如果库中没有这个成员,`ar`也不会给出提示 如果需要列出被删除的成员或者成员不存在的信息,可以加上`v`修饰符
5.调整库中成员的顺序
bash
ar -mb a.c liba.a b.c
这个命令将`b.c`文件移动到`liba.a`静态库中`a.c`文件之前
6.将文件插入到库中的指定位置
bash
ar -ra a.c liba.a b.c
这个命令将`b.c`文件插入到`liba.a`静态库中,并放在已有成员`a.c`之后
总结
`ar`命令是Linux系统中管理静态库文件的强大工具 通过不同的操作选项和修饰选项,用户可以轻松地创建、查询、修改和提取静态库中的成员文件,并调整成员的顺序 熟练掌握`ar`命令的使用,对于提高软件开发的效率和代码的重用性具有重要意义 无论是在开发大型应用程序,还是
Hyper-V磁盘清理:优化存储空间秘籍
Linux下ar命令使用顺序解析
如何快速删除Hyper-V虚拟系统教程
VMware中友软件应用指南
用友软件Linux版:高效企业管理新选择
Hyper-V磁盘空间清理指南
Linux下高效删除Oracle日志文件技巧
用友软件Linux版:高效企业管理新选择
Linux下高效删除Oracle日志文件技巧
Xshell串口使用教程:轻松连接与管理
Linux技巧:轻松实现输出回车符
Xshell中curl命令无返回,排查指南
Linux技巧:轻松读取数组数据
Linux系统下的锁类型全解析
Linux系统修复:一键解决故障指南
掌握Linux:高效移除命令大揭秘
探索常用的Linux系统高效使用技巧
Linux Oprofile:性能调优的利器
Xshell命令插件:提升终端操作效率