首页 > 编程知识 正文

常用c语言标准库函数,c静态类和非静态类的区别

时间:2023-05-03 08:30:08 阅读:166643 作者:2189

一.库函数介绍:

c语言包含用于执行标准任务的函数,这些任务可以预编译并放置在特殊的目标代码文件(称为库)中。

库文件中的函数可以通过链接器链接到APP应用程序,从而无需在每次运行程序时编译这些公共函数。

标准的c函数库名称为libc,包含内存管理和输入输出操作等基本函数。 这些库位于系统的公共目录中,如/usr/lib,系统中的所有用户都可以使用这些库函数,也可以自己创建库。

来修改标记元素的显示属性。 静态库; 共享库

二.静态库:

1 )基本概念:

静态库也称为文档文件(Archive File )。 这是多个. o文件的集合。 Linux静态库文件的后缀为“a”。

静态库中的代码在编译时链接到APP应用程序

静态库中的每个成员. o文件没有特殊的存在格式,而只是. o文件的集合。

使用“ar”工具维护和管理静态库

2 )静态库的创建和使用方法

以下是创建静态链接库的示例。

1 .创建源文件:

源代码1:my_strcpy.c:(1 (实现一个strcpy功能) ) ) )。

#包含

#包含

#包含

voidmy_strcpy(char*des,const char *src ) ) )。

{

wile(*des=*src );

}

源代码2:my_strcmp.c(1 (实现一个strcmp的功能) ) ) ) ) ) ) )。

#包含

#包含

#包含

intmy_strcmp(constchar*obj1,const char *obj2) ) ) ) ) ) ) )。

{

while(*obj1*obj2) )。

{

if(*obj1-*obj2) ) ) ) ) ) ) if ) ) ) ) ) )。

{

return(*obj1-*obj2);

}

else

{

obj1;

obj2;

}

}

返回0;

}

2、生成. o文件

gcc -c my_strcpy.c my_strcmp.c

3、建立静态链接库

ar rcs libmylib.a *.o

现在,已在当前路径下创建了libmylib.a静态库。

在ar的三个参数中,r表示向归档文件插入,c表示创建归档文件,s表示如果归档文件包含对象模式,使用该参数创建保存文件的符号表

lib和. a都是系统指定的静态库文件的固定形式,mylib才是静态库的名称,编译时链接器使用标准路径(/usr/lib; /lib )或按用户指定的路径查找. a文件。

4、测试静态链接库

编写测试代码: main.c

#包含

#包含

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 );

Bero(des,0 );

my_strcpy(des,s2 );

printf(%s(n ),des );

res=my_strcmp(S1,s2 );

是if(RES0)

printf(S1S2(n ) );

ELSEif(RES0)

printf(S1S2(n ) );

else

printf(S1=S2(n );

返回0;

}

gcc-omain main.c-static-l .lmy lib

-static指定编译器链接静态库,-L .指定静态库的路径作为当前路径。 在浏览gcc编译器可搜索的目录和库文件时,必须使用-L库名称。 例如,可以通过添加-lm将标准算术库链接到程序汇,通过添加-lpthread将标准线程库链接到linux标准线程库

./main后的输出:

你好,Linux。

光晕世界。

s1 s2

3 )总结:

静态库允许程序独立于其他库运行,但它占用大量内存和磁盘空间,并且在库文件更新时需要重新编译源代码,因此缺乏灵活性。

使用lsl main,您可以看到可执行文件main的大小至少为500kb。 这是因为在编译时指定了-static。 由此可知,编译时需要链接的所有库都作为静态库被链接,gcc默认链接到标准c库,因此标准c库的静态库版本也被链接到可执行程序

实际上,在编译时不需要添加-static,而是直接使用gcc-omain main.c-l .lmy lib将连接器链接到指定的静态库和标准c的共享库。 这样编译后,可执行程序只有7KB左右的大小。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。