windows下的dll文件和linux下的.so文件

来源:互联网 发布:有hao123软件 编辑:程序博客网 时间:2024/05/22 10:27

转自:http://blog.sina.com.cn/s/blog_66e717d70100h9mi.html

在开发上来说,是有一点区别的。  

  .so文件没有入口函数的概念。而dll却有,虽然不是必须。  
  .so会导出所有在头文件中定义的符号。而dll却需要使用特殊关键字指名应该导出那些。  
  .so文件是elf格式的,可以不连接某些静态库,而等应用程序去连接。而dll需要连接静态库。
  动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库。大多数操作系统将解析外部引用(比如库)作为加载过程的一部分。在这些系统上,可执 行文件包含一个叫做import   directory的表,该表的每一项包含一个库的名字。根据表中记录的名字,装载程序在硬盘上搜索需要的库,然后将其加载到内存中预先不确定的位置,之 后根据加载库后确定的库的地址更新可执行程序。可执行程序根据更新后的库信息调用库中的函数或引用库中的数据。这种类型的动态加载成为装载时加载   ,被包括Windows和Linux的大多数系统采用。装载程序在加载应用软件时要完成的最复杂的工作之一就是加载时链接。  
   
  其他操作系统可能在运行时解析引用。在这些系统上,可执行程序调用操作系统API,将库的名字,函数在库中的编号和函数参数一同传递。操作系统负责立即解 析然后代表应用调用合适的函数。这种动态链接叫做运行时链接   。因为每个调用都会有系统开销,运行时链接要慢得多,对应用的性能有负面影响。现代操作系统已经很少使用运行时链接。  
   
  可以动态链接的库,在Windows上是dynamic   link   library   (DLL),在UNIX或Linux上是Shared   Library。库文件是预先编译链接好的可执行文件,存储在计算机的硬盘上。大多数情况下,同一时间多个应用可以使用一个库的同一份拷贝,操作系统不需 要加载这个库的多个实例。  
   
  Windows   和   Linux   的加载时链接是由操作系统来完成的,格式在不同的系统下有不同的区别,但是原理还是一样的,LZ不必在这个问题上深究。
原创粉丝点击