免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 984 | 回复: 0
打印 上一主题 下一主题

lib@Win&Linux(转载) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-04 16:13 |只看该作者 |倒序浏览
库的分类
Windows下的库有两种:静态库(.lib)和动态链接库(.dll)。
Linux下的库有两种:静态库(.a)和共享库(.so)。
Linux下的静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称
Linux下的动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号,minor是副版本号。
Windows下的库与Linux下的库的异同
Linux的共享库(.so)就象Windows的动态链接库(.dll),它里面包含有很多程序常用的函数。为了方便程序开发和减少程序的冗余,程序当
中就不用包含每个常用函数的拷贝,只是在需要时调用共享库中常函数即可。这种方式我们称之为动态链接(Dynamically
Linked)。而有时我们不希望叫程序去调用共享库的函数,而是把库函数代码直接链接进程序代码中,也就是说,在程序本身拥有一份共享库中函数的副本。
这种方式我们称之为静态链接(Statically Linked)。
所以,简单的讲静态库和共享库(动态库)的不同点在于代码被载入的时刻不同。
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。
Windows下的动态链接库(.dll)与Linux下的共享库(.so)的差别
.dll文件事实上和.exe文件一样,同属 PE 格式的执行文件。对于隐式的引用外部符号,需要把外部符号所在的位置写在PE头上。PE加载器将从PE头上找到依赖的符号表,并加载依赖的其它.dll文件。
而在Linux 上并非如此!.so文件大多为elf执行文件格式。当它们需要的外部符号,可以不写明这些符号所在的位置。也就是说,通常.so文件本身并不知道它依赖的那些符号在哪些.so里面。这些符号是由调用dlopen的进程运行时提供的。
我们在Windows下做一个.dll文件时还需要携带一个.lib文件;而在
Linux下一般只需要有相应的头文件就够了。对于编写新的.so,找不到的符号可以就让它在那里,直到最终执行文件来把所有需要的符号联合到一起。
windows 可以存在一个.dll对另一个.dll的隐式依赖;而Linux下一般不需要让.so和.so有隐式依赖关系。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/79706/showart_1955243.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP