Linux下ar命令使用顺序解析
linux ar 顺序

首页 2025-01-12 03:48:15



Linux ar命令:管理静态库成员的顺序与操作 在Linux操作系统中,`ar`命令是一个功能强大的工具,用于创建、修改和管理静态库文件

    静态库是一种独立的文件,其中包含了按照特定结构组织起来的多个成员文件(通常是编译后的目标文件,即`.o`文件)

    这些成员文件保留了它们原始的内容、访问模式、时间戳、属主和组等属性

    在软件开发过程中,静态库极大地简化了链接过程,提高了代码的重用性和模块化

     `ar`命令不仅允许用户添加、删除和提取库中的成员文件,还允许调整成员的顺序

    成员的顺序在某些情况下至关重要,特别是在库中有多个模块具有相同符号定义(如函数定义)时

    本文将详细介绍如何使用`ar`命令来管理静态库成员的顺序及相关操作

     `ar`命令的基本语法 `ar`命令的基本语法如下: ar 【--plugin 】【-X32_64】【-】【abcDfilNoPsSTuUvV 【relpos】 【count】】【--target 】【archive】 【member...】 其中: - 连字符`【-】`是可选的

     - ``为操作选项,使用时只能使用其中一个

     - `【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`命令的使用,对于提高软件开发的效率和代码的重用性具有重要意义

    无论是在开发大型应用程序,还是

MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道