PAGE / NUMPAGES
C语言静态函数库的制作和使用方法
一.库函数简介:
C语言中有一些函数会执行一些标准任务,可以事先对这些函数进行编译,然后将他们放置在一些特殊的目标代码文件中,这些目标代码文件称为库。文档收集自网络,仅用于个人学习
库文件中的函数可以通过连接程序与应用程序进行链接,这样就不用在每次执行程序时都对这些通用的函数进行编译了。文档收集自网络,仅用于个人学习
标准的C函数库名称为libc,包含了诸如内存管理或者输入输出操作的基本函数。这些库放置在系统的公用目录下,如/usr/lib,系统中的任何用户都可以利用这些库函数,用户也可以自己建立库。文档收集自网络,仅用于个人学习
库的两种形式:静态库;共享库
二.静态库:
1)基本概念:
静态库又称为文档文件(Archive File)。它是多个.o文件的集合。Linux中静态库文件的后缀为"a"。文档收集自网络,仅用于个人学习
静态库的代码在编译时就已经链接到应用程序中
静态库中的各个成员(.o文件)没有特殊的存在格式,仅仅是一个.o文件的集合。
使用"ar"工具维护和管理静态库
2)如何建立和使用静态库
下面是一个建立静态链接库的例子:
编写源文件:
源码一:my_strcpy.c:(实现一个strcpy的功能)
#include
#include
#include
void my_strcpy(char *des, const char *src)
{
while (*des++ = *src++)
;
}
源码二:my_strcmp.c(实现一个strcmp的功能)
#include
#include
#include
int my_strcmp(const char *obj1, const char *obj2)
{
while (*obj1 && *obj2)
{
if (*obj1 - *obj2)
{
return (*obj1 - *obj2);
}
else
{
obj1++;
obj2++;
}
}
return 0;
}
生成.o文件
gcc -c my_strcpy.c my_strcmp.c
建立静态链接库
ar rcs libmylib.a *.o
这样,就在当前路径下面建立好了libmylib.a的静态库;
ar的三个参数中:r代表将文件插入归档文件中,c代表建立归档文件,s代表若归档文件中包含了对象模式,可利用此参数建立备存文件的符号表。文档收集自网络,仅用于个人学习
lib和.a都是系统指定的静态库文件的固定格式,mylib才是静态库的名称,编译时,链接器会在标准路径(/usr/lib;/lib)或者用户指定的路径下去找.a的文件。文档收集自网络,仅用于个人学习
测试静态链接库
编写测试代码:main.c
#include
#include
int main()
{
int res;
char des[100] = {0};
const char *s1 = "hello linux.";
const char *s2 = "hello world.";
my_strcpy(des, s1);
printf("%s\n", des);
bzero(des, 0);
my_strcpy(des, s2);
printf("%s\n", des);
res = my_strcmp(s1, s2);
if (res > 0)
printf("s1 > s2\n");
else if (res < 0)
printf("s1 < s2\n");
else
printf("s1 = s2\n");