ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Linux_动态库与静态库(其一)
[打印本页]
作者:
不到断气不罢休
时间:
2024-10-3 07:41
标题:
Linux_动态库与静态库(其一)
1.动态库和静态库的定义
动态库(.so):动态库是编译后不嵌入目标文件中的共享库,在步伐运行的时间才去链接动态库的代码,可以被多个步伐共享使用,通常以 .so 结尾。
静态库(.a):静态库是将一组目标文件(.o文件)打包成一个单一的归档文件。在编译时,链接器会将所需的目标文件代码复制到最终生成的可执行文件中,步伐运行的时间将不再需要静态库,通常以.a结尾。
库的命名规则:
lib+库名+后缀(.s/.so等)
eg:libc.so的库名为c,其表现c语言动态库
eg:libc.a的库名为c,其表现c语言静态库
2.动静态步伐的运行过程:
静态可执行步伐
加载:因为可执行步伐包含头文件所有方法和main函数,所以加载到内存比较大。
在内存的步伐代码通过页表对应进程地址空间的正文代码段
如果其他进程也需要使用C库,内存中没有加载C库,C库在静态可执行步伐中,所以其他进程还要重新加载C库,浪费了内存空间
动态可执行步伐
加载:除了代码加载到内存,其所使用的方法也会被加到内存。所以加载比较小
内存中的代码映射到进程地址空间的正文代码段,所使用的方法映射到栈和堆区之间的共享区
如果其他进程也需要使用C库,则只要调解其他进程的映射关系到已经在内存加载好的C库即可,
不需要重复加载,节省内存空间
3.查看可执行步伐依赖的动态库(ldd)
ldd
主要用于查看动态库的依赖关系,而静态库在编译时会被直接链接到可执行文件中,因此通常不会表现依赖。
4.静态库与动态库的优缺点
静态库
缺点:
1).加载到内存时所占空间大
2).多个进程使用同一库会导致内存资源浪费
优点:
1).与库无关,库已经链接在可执行步伐中,删除库后仍可运行
2).步伐不依赖于库,跨平台性更强
动态库
缺点:
1).依赖库,如果可执行步伐生成后,删除库则无法运行这个可执行步伐
优点:
1).节省内存空间资源
对比动态可执行步伐与静态可执行步伐所占内存的差异:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4