Linux ar 示例:如何创建、查看、提取、修改 C 归档文件
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
- 点赞
- 收藏
- 关注作者
评论(0)