C静态库

为什么要使用库?
使用库可以加快编译的链接阶段,因为要查找和打开的文件较少。

什么是静态库?
静态库是对象文件的集合,其中可以包含函数,变量等。在Linux中,静态库以’.a’扩展名结尾,而Microsoft Windows使用“ .lib”扩展名。

如何建立它们

假设我们要创建一个带有两个函数“ strlen.c”和“ atoi.c”的静态库。 首先从源代码获取目标文件。

  -$ ls 
atoi.c标头.h main.c strlen.c
-$ gcc -c strlen.c atoi.c
-$ ls
atoi.c atoi.o标头.h main.c strlen.c strlen.o

现在已经创建了目标文件,使用归档器(ar)创建静态库。

  -$ ar -rc libf.a strlen.o atoi.o 
-S ls
atoi.c atoi.o标头.h libf.a main.c strlen.c strlen.o

这将创建一个名为libf.a的静态库,其中将两个目标文件都复制到其中。 “ c”标志创建档案,“ r”用于将较旧的目标文件替换为较新的文件。 现在,我们必须使用ranlib索引该库,以便编译器可以加快库中的符号查找速度。 您可以使用’nm’列出libf.a中的符号。

  -$ ranlib libf.a 
-$ nm libf.a
  strlen.o: 
0000000000000000 T _strlen
  atoi.o: 
0000000000000000 T _atoi

如何使用

main.c文件使用libf.a中的函数来获取字符串“ Hello,World”的长度以及字符串“ num 123”中的整数。 该命令告诉gcc将main.c与我们的库–lf一起使用以创建名为exe的程序。 “ L”标志将从指定目录中查找库。

  -$ gcc main.c -L。  -lf -o exe 
-$ ./exe
长度:13
整数:123