静态库与动态库的区别和使用
动静态库所用到的一些库文件:
.o 是目标对象文件,相当于windows中的.obj文件。可由一个或多个.c /.cpp来生成
.a 为静态库,可以是一个或多个.o合在一起,用于静态连接;多个.o文件可以链接生成一个.exe的可执行文件。静态库在程序编译时会被连接到目标代码中,相当于将你使用库里的函数加载到程序里,在编译的时候直接编译进去,这样,在编译之后执行程序时将不再需要该静态库。编译之后程序文件大,但加载快,隔离性也好。所以它的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为它的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。
.so 为动态库(共享库),类似windows平台的.dll文件。动态库在程序编译时并不会被连接到目标代码中,而是在编译时仅引用,体积小,在程序运行到相关函数时才调用函数库里的相应函数,才被载入,因此在程序运行时还需要动态库存在。多个应用程序可以使用同一个动态库,启动多个应用程序的时候,只需要将动态库加载到内存一次即可。
静态库与动态库的区别:
1) 最大区别: 加载的时刻不同
静态库在程序编译阶段加载,可能使目标程序变大
动态库在程序运行阶段加载,目标程序相对较小。
2) 静态库编译完成可以删除库文件
动态库编译完成必须保留库文件
3) 接口文件一致,创建目标文件过程一致。
制作库文件命令不同,使用流程不同
4) 不论是静态库还是动态库都存在潜在的隐患。
#静态库的简单使用#
1)编写功能函数功能实现 不能有main函数
hello.c 只做一个hello功能。
hello.h 接口文件,用于声明功能函数。
2)编译功能函数为目标文件:
gcc -c hello.c -o hello.o
3)使用目标文件制作静态库:
ar crs libhello.a hello.o
注意:目标静态库必须以lib开头,以.a 结尾。
4)使用静态库:
4.1 编写测试单元main.c
4.2 将测试代码与库同时编译
gcc main.c -L. -l hello
4.3 验证库的执行效果
./a.out
备注:
-L. :表示当前路径;
-l :后面跟库文件名字;
#动态库的简单使用#
1)编写功能函数
hello.c
hello.h
(函数同上静态库的使用)
2)将功能函数编译成目标文件
gcc -fPIC -c hello.c
3)制作动态库
gcc -shared -fPIC hello.o -o libhello.so
4)使用测试环境测试动态库
4.1 )编写main.c 测试代码
4.2 )拷贝目标动态库到系统路径
cp libhello.so /usr/lib
若提示permission denied,使用sudo权限
或者改变环境变量
export LD_LIBRARY_PATH=/mnt/nfs/1615/io/06
4.3 )编译测试单元
gcc main.c -L. -l hello
4.4 )执行测试单元
./a.out
总结
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
静态库与动态库的区别和使用相关推荐
- C/C++ 静态库和动态库的区别
可执行目标文件 可重定位目标文件 共享目标文件 静态库和动态库的区别: 生效阶段不同,静态库是在编译阶段就会把其链接到可执行目标文件中:动态库是在程序运行过程中指定路径或者系统动态库路径下寻找. -l ...
- 关于静态库、动态库的区别汇总
real framework中不可以使用类别 或 不可以不包含类文件 real framework 中直接调用NSClassFromString函数会返回null 需要强制加载指定类 或 直接通过类 ...
- C++静态库与动态库的区别?
C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...
- 静态库与动态库的区别
静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...
- 静态库与动态库(共享库)的联系与区别
提要: 1.静态库 静态库,也称作归档库(archive),按惯例它们的文件名都以.a结尾.比如,标准C语言函数库/usr/lib/libc.a和X11函数库/usr/ ...
- Linux中静态库和动态库(共享库)的区别
1. 静态库和动态库的制作过程区别 1.1 静态库的制作过程 详见博客:Linux中静态库的制作与使用 1.2 动态库的制作过程 详见博客:Linux中动态库(共享库)的制作与使用 2. 静态库和动态 ...
- 静态库与动态库的区别(转)
静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...
- 静态库,动态库是啥,有啥区别(静态函数库/动态函数库)
因之前初学接触这个概念的时候无法直观的理解,询问多人也得到类似如下回复:静态库就是静态库,动态库就是动态库.一个编译一个不编译等类似的回复.伪善的人太多,披着"有问题可以问我"的外 ...
- 静态库和动态库的区别(面试题)
目前以lib为后缀的库有两种,一种为静态链接库,另一种则为动态连接库的导入库. 则他们的区别如下: 静态库 静态函数库的扩展名一般为(.a或.lib),这类的函数库通常扩展名为libxxx.a或xxx ...
- vs如何把c语言编译成静态库,VS中Debug和Realease、及静态库和动态库的区别整理(转)...
一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码 ...
最新文章
- 关于Nikon Ai AF 28mm F1.4D遮光罩的问题
- InsightFace tensorRT
- mysql float 精度阶段_mysql下float类型使用一些误差详解
- 字符和编码之间的转换(Python)
- C/C++语言函数参数里的“...”作用,va_list的使用(stdarg.h)
- Android 自定义View自定义属性的声明
- 真是搞不懂原始套接字SOCK_RAW和AF_PACKET
- 搭载Apple芯片的Mac如何使用macOS恢复?
- 原生js制作PC端轮播图
- 一键下载百度文库/豆丁/道客巴巴文档,支持导出PDF,Word,txt 文件
- C盘空间不够?win10自带mklink命令给C盘软件搬家减负【计算机小白必备】
- 中国单箱梁体最宽矮塔斜拉桥合龙
- 二叉树面试题总结(Java)
- 天天向上python题目答案_Python练习:天天向上的力量
- 佐治亚理工学计算机硕士,佐治亚理工学院电子与计算机工程硕士专业
- 云队友丨当代攒钱青年现状:没变富,先「变负」
- 大学生面试最喜欢问的十个问题
- 基于Bert论文构建Question-Answering模型
- 基于关系数据库彩票投注模拟系统设计与实现
- C语言实现家族树的建立与操作