一、作用
对静态库进行操作。
二、静态库本质是什么
都知道静态库是一些功能代码的集合,连接阶段和主程序连接,可以将静态库中的代码融合到主程序中。
那么静态库到底是什么呢?实际上,静态库就是一堆 .o 文件的集合,准确说法如下:
静态库是通过编译器编译源代码文件并将生成的目标文件打包生成后的归档文件。
说白了静态库就是一个被打包工具打完的包,里面放的就是 .o 文件。
这个打包工具就是 ar,全称:archiver 。
三、栗子
test.h
#include <stdio.h>
void print();
test.c
#include "test.h"
void print()
{
printf("hello world!\n");
}
main.c
#include "test.h"
int main()
{
print();
return 0;
}
gcc -c test.c
ar rcs libtest.a test.o
gcc -o main main.c -L. -ltest
./main
hello world!
这里我们成功使用了 ar 工具制作了一个静态库:libtest.a 。
四、命令解析
1、参数 r :在库中插入模块(替换)。
当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar 显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。
2、参数 c :创建一个库。
不管库是否存在,都将创建。
3、参数 s :创建目标文件索引,这在创建较大的库时能加快时间。
(补充:如果不需要创建索引,可改成大写 S 参数;如果 .a 文件缺少索引,可以使用 ranlib 命令添加)
4、参数 t :ar t libxxx.a
显示库文件中有哪些目标文件,只显示名称。
5、参数 v :ar tv libxxx.a
显示库文件中有哪些目标文件,显示文件名、时间、大小等详细信息。
6、格式:nm -s libxxx.a
显示库文件中的索引表。
7、格式:ranlib libxxx.a
为库文件创建索引表。
(SAW:Game Over!)