linux应用编程笔记(4)静态函数库和动态函数库使用
来源:互联网 发布:淘宝查假货 编辑:程序博客网 时间:2024/05/21 22:40
摘要:总结了静态函数库和动态函数库的含义和用法,通过实例演示了制作静态函数库和动态库的过程。
一、什么是静态库函数和动态库函数
linux当中进行编程的时候,我们会使用很多的函数,例如open,read等等,这些函数一部分由库函数提供,一部分是系统调用。函数库呢,主要分为静态函数库和动态函数库。
静态函数库:静态函数库我们需要的库会被编译到程序当中去,当程序运行起来之后,不在需要外部的库,因为需要的库已经编译到本身当中了。 静态函数库最大的缺点在于空间的浪费,因为如果多个程序都需要调用同一个库,那么它就会每个程序拷贝一份,最后编译出来的程序非常的大。
动态函数库:动态库函数就是不把需要的库编译到程序里,而是在程序运行的时候,再去动态库里面调用。动态链接库的优点在于有时候各个模块之间会涉及到一些通用的功能,比如读写文件,查找、排序。为了减少代码的冗余,提高代码的质量,可以将这些通用的部分提取出来,做出公共的模块库。通过动态链接库可以实现多个模块之间共享公共的函数。
打个比方,我们两队工人出去干活,一个队伍叫A假设它是静态方式,一个叫队伍叫B假设它是动态方式,A把出去干活需要的工具每个人都带一份,背在身上,这样就一人带一份工具做事了。B呢?它不,它找了辆卡车,把需要的工具放在卡车里面了,然后出去干活的时候,需要工具了,它就去卡车里面拿,用完再放回去,优缺点也就一目了然了。
在linux下,库函数都是存放在/lib或者usr/lib目录下,其中采用*.so.*方式命名的都是动态链接库,而以*.a命名的都是静态库。
二、制作与使用静态函数库
这里写一个自己的函数做成库的方式,然后在应用程序里面进行这个库的静态编译与调用,具体步骤如下:
1.gcc–c mylib.c –o mylib.o
2.arcqs libmylib.a mylib.o
3.将制作好的libmylib.a拷贝到/usr/lib目录下
4.在编译的时候加上编译选项:-lmylib
下面首先编写fun.c,功能是比较s1和s2字符串中不同的字母并输出,fun.c如下:
<span style="font-size:18px;">#include <stdio.h>#include <string.h>/*fun的作用:比较字符串s1和s2中不同的字符并输出*/ void fun(void){ intlen1=0; intlen2=0; intcount=0; inti=0; chars1[20]; chars2[20]; chars3[20]; gets(s1); gets(s2); len1=strlen(s1); len2=strlen(s2); if(len1<=len2) { for(i=0;i<=len2;i++) { if(s1[i]!=s2[i]) { s3[count]=s1[i]; count++; } } } else { for(i=0;i<=len1;i++) { if(s2[i]!=s1[i]) { s3[count]=s1[i]; count++; } } } for(i=0;i<count;i++) putchar(s3[i]); putchar('\n'); }</span>
mylib.c如下:
<span style="font-size:18px;">#include <stdio.h>#include <string.h>#include "fun.h" int main(void){ fun(); return0; }</span>
fun.h如下:
void fun(void);
下面进行编译制作:
# gcc –c fun.c –o funlib.o
# ar cqs libfunlib.a funlib.o
# cp libfunlib.a /usr/lib/
# gcc mylib.c –o mylib
#./mylib
运行结果如下:
三、制作与使用动态函数库
还是使用上面的文件,按照以下步骤:
# gcc –c mylib.c –o mylib
#gcc –shared –fPIC mylib.o –o libmylib.so
#cp libmylib.so /usr/lib/
其中:
fPIC使输出的对象模块是按照可重定位地址方式生成的。
shared是指明产生动态链接库。
步骤和最后运行结果如下:
这篇帖子就总结到这里吧,如有不正确的地方还请指出,大家共同进步!
- linux应用编程笔记(4)静态函数库和动态函数库使用
- Linux应用开发--静态函数库和动态函数库
- 静态函数库和动态函数库
- 静态函数库 和 动态函数库
- linux下的静态函数库和动态函数库
- linux下的静态函数库和动态函数库
- linux下的静态函数库和动态函数库
- linux下的静态函数库和动态函数库
- linux下的静态函数库和动态函数库创建和使用
- Linux静态函数库的使用和制作/动态…
- Unix/Linux下静态函数库和动态函数库的制作及使用
- Linux:静态函数库(.a)与动态函数库(.so)
- 静态函数库和动态函数库的制作
- 静态和动态函数库设计
- 静态函数库与动态函数库区别、应用--ldconfig、ldd
- Linux中有两类函数库 分别是静态库和动态库
- 2-6 静态函数库和动态函数库的建立
- 静态函数库与动态函数库(共享库)的创建
- 免费系统设计公开课,阿里P8主讲!一节课搞定一半系统设计面试题!
- Redis的安装和启动
- Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_JSContext", referenced from: ...........
- Eclipse中直接复制粘贴Web项目并运行后,项目名字还是原来名字无法运行的问题解决方法
- PyQt4 单击事件
- linux应用编程笔记(4)静态函数库和动态函数库使用
- 命令无法执行系列(二) lsb_release
- ios模拟器不响应电脑键盘解决方法
- 多方法比较
- phpStudy for Linux (lnmp+lamp一键安装包)
- UML之时序图(Sequence Diagram)
- 运行Python脚本的一种方法
- OpenCV3.0基本类型初探(三)MAT初探
- mysql 操作 指南