动静态库所用到的一些库文件:
.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
总结
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。

静态库与动态库的区别和使用相关推荐

  1. C/C++ 静态库和动态库的区别

    可执行目标文件 可重定位目标文件 共享目标文件 静态库和动态库的区别: 生效阶段不同,静态库是在编译阶段就会把其链接到可执行目标文件中:动态库是在程序运行过程中指定路径或者系统动态库路径下寻找. -l ...

  2. 关于静态库、动态库的区别汇总

    real framework中不可以使用类别 或 不可以不包含类文件 real framework 中直接调用NSClassFromString函数会返回null  需要强制加载指定类 或 直接通过类 ...

  3. C++静态库与动态库的区别?

    C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

  4. 静态库与动态库的区别

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  5. 静态库与动态库(共享库)的联系与区别

    提要: 1.静态库                 静态库,也称作归档库(archive),按惯例它们的文件名都以.a结尾.比如,标准C语言函数库/usr/lib/libc.a和X11函数库/usr/ ...

  6. Linux中静态库和动态库(共享库)的区别

    1. 静态库和动态库的制作过程区别 1.1 静态库的制作过程 详见博客:Linux中静态库的制作与使用 1.2 动态库的制作过程 详见博客:Linux中动态库(共享库)的制作与使用 2. 静态库和动态 ...

  7. 静态库与动态库的区别(转)

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  8. 静态库,动态库是啥,有啥区别(静态函数库/动态函数库)

    因之前初学接触这个概念的时候无法直观的理解,询问多人也得到类似如下回复:静态库就是静态库,动态库就是动态库.一个编译一个不编译等类似的回复.伪善的人太多,披着"有问题可以问我"的外 ...

  9. 静态库和动态库的区别(面试题)

    目前以lib为后缀的库有两种,一种为静态链接库,另一种则为动态连接库的导入库. 则他们的区别如下: 静态库 静态函数库的扩展名一般为(.a或.lib),这类的函数库通常扩展名为libxxx.a或xxx ...

  10. vs如何把c语言编译成静态库,VS中Debug和Realease、及静态库和动态库的区别整理(转)...

    一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码 ...

最新文章

  1. 关于Nikon Ai AF 28mm F1.4D遮光罩的问题
  2. InsightFace tensorRT
  3. mysql float 精度阶段_mysql下float类型使用一些误差详解
  4. 字符和编码之间的转换(Python)
  5. C/C++语言函数参数里的“...”作用,va_list的使用(stdarg.h)
  6. Android 自定义View自定义属性的声明
  7. 真是搞不懂原始套接字SOCK_RAW和AF_PACKET
  8. 搭载Apple芯片的Mac如何使用macOS恢复?
  9. 原生js制作PC端轮播图
  10. 一键下载百度文库/豆丁/道客巴巴文档,支持导出PDF,Word,txt 文件
  11. C盘空间不够?win10自带mklink命令给C盘软件搬家减负【计算机小白必备】
  12. 中国单箱梁体最宽矮塔斜拉桥合龙
  13. 二叉树面试题总结(Java)
  14. 天天向上python题目答案_Python练习:天天向上的力量
  15. 佐治亚理工学计算机硕士,佐治亚理工学院电子与计算机工程硕士专业
  16. 云队友丨当代攒钱青年现状:没变富,先「变负」
  17. 大学生面试最喜欢问的十个问题
  18. 基于Bert论文构建Question-Answering模型
  19. 基于关系数据库彩票投注模拟系统设计与实现
  20. C语言实现家族树的建立与操作

热门文章

  1. 【爬虫实战】起点中文网排行榜(XPath)
  2. c#调用microsoft word将word另存为pdf
  3. 以阿尔兹海默症为例:深度解析AI+慢病商业模式
  4. java文件上传判重姿势浅谈
  5. 渗透测试工程师从业经验
  6. mysql 读写分离 事务_mysql 读写分离(基础篇)
  7. ADAS功能中LCA、LKA、LCK...区别
  8. 使用jwplayer插件播放视频
  9. Python 小节案例-计算体脂率
  10. 组态王总结之——数据库功能