Linux ar 示例:如何创建、查看、提取、修改 C 归档文件

举报
Tiamo_T 发表于 2022/03/22 10:43:24 2022/03/22
【摘要】 ar 是一种归档工具,用于组合对象以创建扩展名为 .a 的归档文件,也称为库。 在本文中,让我们讨论如何使用“ar”实用程序在 C 编程中创建用户定义的静态库。这些示例展示了如何使用 Linux ar 命令创建、提取和修改档案。

ar 是一种归档工具,用于组合对象以创建扩展名为 .a 的归档文件,也称为库。

在本文中,让我们讨论如何使用“ar”实用程序在 C 编程中创建用户定义的静态库。这些示例展示了如何使用 Linux ar 命令创建、提取和修改档案。

为了演示静态库的创建,让我们创建两个 C 程序——addition.c 和 multiplication.c

使用 gcc,获得这些程序的目标代码,并从这两个目标中创建静态库 libarith.a。

1. 创建两个示例 C 程序

创建addition.c程序,如下所示。

int addition(int a,int b)
{
int result;
result = a + b;
return result;
}

创建 multiplication.c 程序,如下所示。

int multiplication(int a, int b)
{
int result;
result = a * b;
return result;
}


2. 编译程序并获取目标代码

使用 -c 选项编译这两个 c 程序。使用选项 -c 将创建相应的 .o 文件。

$ gcc -c addition.c

$ gcc -c multiplication.c

现在,当前工作目录包含 .c 和 .o 文件,如下所示。

$ ls
addition.c   multiplication.c   addition.o   multiplication.o

3. 使用 ar 实用程序创建 C 程序静态库

现在使用加法目标文件和乘法目标文件创建静态库“libarith.a”,如下所示,

$ ar cr libarith.a addition.o multiplication.o

4. 编写 C 程序以使用库 libarith.a

库文件 libarith.a 现在可以使用了。以下示例说明如何编写带有头文件的示例 C 程序以使用 libarith.a 静态库。

创建 header.h :

#include <stdio.h>
int addition(int a,int b);
int multiplication(int a,int b);

创建 example.c :

#include "header.h"
int main()
{
int result;
result = addition(1,2);
printf("addition result is : %d\n",result);
result = multiplication(3,2);
printf("multiplication result is :  %d\n",result);
}

注意:如何在 5 个简单步骤中使用 gdb 调试 C 程序提供了有关调试 C 代码的分步说明。

编译 example.c :

$ gcc -Wall example.c -L/home/guest/ -larith -o example

选项 -L 指示编译器在 /home/guest 目录中查找库文件。从这个目录,编译器获取 libarith 库文件,用 example.c 程序编译它。

编译 example.c 的另一种方法:

$ gcc -Wall example.c libarith.a -o example

执行示例可执行文件:

$ ./example
addition result is : 3
multiplication result is : 6

5. 使用 ar 命令,选项 t 查看存档中的目标文件

列出 libarith.a 中可用的目标文件:

$ ar t libarith.a
addition.o
multiplication.o

ar 命令中的选项类似于tar 命令

6. 使用 ar 命令,选项 x 从存档中提取目标文件

您可以按如下方式提取存档中可用的目标文件。

$ mkdir object

$ cp libarith.a object/

$ cd object

$ ar x libarith.a

$ ls *.o
addition.o
multiplication.o

7. 使用 ar,选项 r 将目标文件添加到现有存档中

假设您创建了另一个名为 subtraction.o 的目标文件

以下命令通过插入 subtraction.o 对象来扩展 libarith.a 库文件,如下所示。

$ ar r libarith.a subtraction.o 

$ ar t libarith.a
addition.o
multiplication.o
subtraction.o

在插入 .o 文件时,它已经存在于存档中,它将被替换。在不检查替换的情况下,可以使用 -q 选项将对象添加到存档的末尾。

8. 使用 ar,选项 d 删除特定存档成员

要从库文件中删除特定存档成员,请执行以下操作。

$ ar d libarith.a addition.o

$ ar t libarith.a
multiplication.o
subtraction.o
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。