【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

实际工作中动态库和静态库都用到,今天聊一下两者的区别。如果没有特别的说明,这里的动态库是指linux系统下的动态库。同样,静态库也是指linux下的静态库。两者都是elf文件、都可以用gcc编译生成。

1、动态库会节省空间

动态库可以被很多程序共享,不用特别编译到执行文件里面。

2、动态库更新方便

软件如果更新幅度不大,可以只更新动态库即可。

3、动态库可以更好的开发插件

很多软件、比如lighttpd服务器,都是用动态库来开发插件。

4、动态库也是可以执行的

比如ld.so就可以独立执行

5、动态库依赖于编译器、链接器和加载器的合作

动态库首先需要用-shared和 -fPIC进行编译,链接的时候需要生成.got、.got.plt,同样如果函数加载失败需要loader和kernel的配合。

6、动态库版本的更新依赖于soname机制

动态库有时候也需要更新,这个时候可以用soname来完成

7、动态库中的函数需要延迟加载

动态库里面的函数都要经过loader一下,才能被识别

比如说printf,第一次是找不到函数地址的,只有被__dl_runtime_resolove一下才能被识别

8、静态库和动态库一般编译的时候一起生成

因为静态库调试起来更加方便,比如libc就常常静态库、动态库一起生成

ps:

关于gcc详细的编译过程,可以参考gcc -v hello.c。我们看到的是gcc,实际上它是由cc1、as、collect三个部分组成的。

随想录(动态库的特点)相关推荐

  1. 随想录(windows静态库和动态库)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在软件编程当中,动态库还是很有意思的.相比较静态库而言,动态库不管是开发.还是升级等方面都比较方 ...

  2. linux代码动态分析软件,举例分析Linux动态库和静态库

    函数库分为静态库和动态库两种.创建Linux静态库和Linux动态库和使用它们在这里将以举例的形式详述一下.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不 ...

  3. CMake 打包已经存在的动态库生成 target

    一. 背景 在 CMakeLists.txt 中,某模块 A 通过 add_subdirectory 引入模块 B ,模块 B 通过 add_subdirectory 引入模块 C.模块 C 里面本身 ...

  4. Linux系统程序运行时加载动态库路径顺序

    程序运行时加载动态库路径顺序(Linux) 在linux系统中,如果程序需要加载动态库,它会按照一定的顺序(优先级)去查找: 链接时路径(Link-time path)和运行时路径(Run-time ...

  5. linux动态库命名规则

    说道"动态库版本兼容",很多人头脑中首先蹦出的就是"Dll Hell".啊,这曾经让人头疼的难题.时至今日,这个难题已经很好地解决了.   在进一步讨论之前来思 ...

  6. gdb 查找动态库方法

    当GDB无法显示so动态库的信息或者显示信息有误时,通常是由于库搜索路径错误导致的,可使用set sysroot.set solib-absolute-prefix.set solib-search- ...

  7. Linux动态库(.so)搜索路径

    众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路 ...

  8. Linux动态库和静态库比较

     Linux动态库和静态库比较文件预览 文件目录树如下,如你所见,非常简单.    1. libtest/    2. |-- lt.c    3. |-- lt.h    4. `-- test.c ...

  9. Ubuntu下CodeBlocks的安装、配置及静态库动态库的简单使用举例

    1.  从Ubuntu Software Center中搜索Code::Blocks并安装: 2.  在第一次启动时选择GNU GCC Compiler作为默认的编译器: 3.  生成静态库并调用操作 ...

最新文章

  1. Index of Test
  2. Service 深度解析
  3. 无法访问你试图使用的功能所在的网络位置_[steam实用工具]解决无法访问商店/社区/好友列表的问题...
  4. 失去循环标记的Python,我这样实现跳出外层循环
  5. git理解HEAD,master
  6. 关于C#中的get与set函数
  7. 互联网寒冬!闭关60天学懂NDK+Flutter,专题解析
  8. Git遇到的问题:This is not a valid source path/URL
  9. eclipse中的英文与汉语对照表
  10. FoxyProxy Standard与brupsuite配置
  11. HTML课题背景怎么写,课题研究的背景和意义怎么写
  12. Angular之生命周期函数
  13. 华为p10自带计算机,华为p10如何连接电脑 华为p10连接电脑教程【图文】
  14. sublime text 3搭建Python3的开发环境
  15. python 因子分析 权重计算方法_因子得分如何计算_spss如何计算因子得分
  16. 什么是GPU云服务器,有哪些优势?
  17. 看见阿里的语音识别系统很好
  18. [MATLAB学习]:Matlab生成滑动平均滤波算法文件并移植到STM32单片机上运行——基于CubeMX
  19. 选择测径仪 13点注意事项
  20. 离职3天被20个同事集体拉黑:职场人情,远比你想象的残酷

热门文章

  1. 内外网同时使用解决办法
  2. 万万没想到 过去一年 蚂蚁森林成了联合国会议上的“网红”
  3. 【第三十七章】 springboot+docker(手动部署)
  4. lambda方法引用总结——烧脑吃透
  5. JavaScript效果之选项卡
  6. unittest----assert断言的使用
  7. ArcGIS API for JavaScript 4.9 3.26 发布与新特性
  8. memcached telnet命令
  9. 0x06 MySQL 单表查询
  10. 《机器学习实战》学习笔记