新手学堂:Windows与Linux系统下的库介绍
发布:smiling 来源: PHP粉丝网 添加日期:2014-03-08 14:45:56 浏览: 评论:0
什么是库
库文件是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的。它们通常由一组互相关联的用来完成某项常见工作的函数构成,从本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。
无论在Windows平台还是在Linux平台下都存在大量的库,但由于Windows和Linux的本质不同,因此二者的库的二进制是不兼容的。
库的分类
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有隐式依赖关系.
Tags: 新手 Windows Linux系统
相关文章
- ·Linux新手学堂 关于Linux的时间与时区(2014-03-08)
- ·新手学堂:摸清Linux日志处理的来龙去脉(2014-03-08)
- ·新手学堂:关于Linux操作系统启动的问题(2014-03-08)
- ·新手注意:对于Linux系统的几个常见误解(2014-03-08)
- ·新手学堂:Linux操作系统创建链接的方法(2014-03-08)
- ·新手学堂:安装Linux应该了解的六个问题(2014-03-08)
- ·新手学堂:Linux Shell中强大的正则grep(2014-03-08)
- ·新手学堂:在Linux下制作虚拟光盘的方法(2014-03-08)
- ·新手必备:Linux新手要了解的十个知识点(2014-03-09)
- ·Linux开发工具和Windows开发工具对比(2013-11-11)
- ·几个Windows到Linux的代码移植问题(2014-03-06)
- ·对比:Linux和Windows系统线程间的区别(2014-03-08)
- ·玩转WindowsXP 访问Linux下的共享文件(2014-03-08)
- ·Mac os的压缩zip文件在windows系统下打开中文文件名乱码(2015-04-28)
- ·教你使用Linux系统的Shell脚本维护Oracle(2014-02-28)
- ·基于2.6.19内核小型Linux系统制作与移植(2014-02-28)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)