随想录(动态库的特点)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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三个部分组成的。
随想录(动态库的特点)相关推荐
- 随想录(windows静态库和动态库)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在软件编程当中,动态库还是很有意思的.相比较静态库而言,动态库不管是开发.还是升级等方面都比较方 ...
- linux代码动态分析软件,举例分析Linux动态库和静态库
函数库分为静态库和动态库两种.创建Linux静态库和Linux动态库和使用它们在这里将以举例的形式详述一下.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不 ...
- CMake 打包已经存在的动态库生成 target
一. 背景 在 CMakeLists.txt 中,某模块 A 通过 add_subdirectory 引入模块 B ,模块 B 通过 add_subdirectory 引入模块 C.模块 C 里面本身 ...
- Linux系统程序运行时加载动态库路径顺序
程序运行时加载动态库路径顺序(Linux) 在linux系统中,如果程序需要加载动态库,它会按照一定的顺序(优先级)去查找: 链接时路径(Link-time path)和运行时路径(Run-time ...
- linux动态库命名规则
说道"动态库版本兼容",很多人头脑中首先蹦出的就是"Dll Hell".啊,这曾经让人头疼的难题.时至今日,这个难题已经很好地解决了. 在进一步讨论之前来思 ...
- gdb 查找动态库方法
当GDB无法显示so动态库的信息或者显示信息有误时,通常是由于库搜索路径错误导致的,可使用set sysroot.set solib-absolute-prefix.set solib-search- ...
- Linux动态库(.so)搜索路径
众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路 ...
- Linux动态库和静态库比较
Linux动态库和静态库比较文件预览 文件目录树如下,如你所见,非常简单. 1. libtest/ 2. |-- lt.c 3. |-- lt.h 4. `-- test.c ...
- Ubuntu下CodeBlocks的安装、配置及静态库动态库的简单使用举例
1. 从Ubuntu Software Center中搜索Code::Blocks并安装: 2. 在第一次启动时选择GNU GCC Compiler作为默认的编译器: 3. 生成静态库并调用操作 ...
最新文章
- Index of Test
- Service 深度解析
- 无法访问你试图使用的功能所在的网络位置_[steam实用工具]解决无法访问商店/社区/好友列表的问题...
- 失去循环标记的Python,我这样实现跳出外层循环
- git理解HEAD,master
- 关于C#中的get与set函数
- 互联网寒冬!闭关60天学懂NDK+Flutter,专题解析
- Git遇到的问题:This is not a valid source path/URL
- eclipse中的英文与汉语对照表
- FoxyProxy Standard与brupsuite配置
- HTML课题背景怎么写,课题研究的背景和意义怎么写
- Angular之生命周期函数
- 华为p10自带计算机,华为p10如何连接电脑 华为p10连接电脑教程【图文】
- sublime text 3搭建Python3的开发环境
- python 因子分析 权重计算方法_因子得分如何计算_spss如何计算因子得分
- 什么是GPU云服务器,有哪些优势?
- 看见阿里的语音识别系统很好
- [MATLAB学习]:Matlab生成滑动平均滤波算法文件并移植到STM32单片机上运行——基于CubeMX
- 选择测径仪 13点注意事项
- 离职3天被20个同事集体拉黑:职场人情,远比你想象的残酷