请问linux下的*.so文件和windows下的*.dll文件有区别吗?????

zjjysoft 2005-09-20 01:46:34
这两种文件都叫做动态链接文件,但在用于c语言进行编程的时候,他们有区别吗???
请高手帮忙回答!!!!
...全文
2383 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonfkypm 2005-09-22
  • 打赏
  • 举报
回复
对于 .so 刚开始接触!
学习!
sjf331 2005-09-22
  • 打赏
  • 举报
回复
由于操作系统的文件系统不同,所以格式是不同的.但加载思想应该没有太大区别.
KDSwell 2005-09-21
  • 打赏
  • 举报
回复
第一次对动态链接库了解这么多!!
Jagen在路上 2005-09-20
  • 打赏
  • 举报
回复 1
在开发上来说,是有一点区别的。
.so文件没有入口函数的概念。而dll却有,虽然不是必须。
.so会导出所有在头文件中定义的符号。而dll却需要使用特殊关键字指名应该导出那些。
.so文件是elf格式的,可以不连接某些静态库,而等应用程序去连接。而dll需要连接静态库。
jixingzhong 2005-09-20
  • 打赏
  • 举报
回复
对于我们来说, 没有什么区别的吧 ?
我们做开发的 , 这两个基本不是都一样的 ?
jsjjms 2005-09-20
  • 打赏
  • 举报
回复
对于你做程序是一样的,也就是概念一样的,

但实际里面的存储之类肯定不一样了。
hundlom 2005-09-20
  • 打赏
  • 举报
回复
当然有区别了,不同的编译器搞出来的。
zhousqy 2005-09-20
  • 打赏
  • 举报
回复
不是很清楚,感觉差不多的
SuperLinux 2005-09-20
  • 打赏
  • 举报
回复
动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库。大多数操作系统将解析外部引用(比如库)作为加载过程的一部分。在这些系统上,可执行文件包含一个叫做import directory的表,该表的每一项包含一个库的名字。根据表中记录的名字,装载程序在硬盘上搜索需要的库,然后将其加载到内存中预先不确定的位置,之后根据加载库后确定的库的地址更新可执行程序。可执行程序根据更新后的库信息调用库中的函数或引用库中的数据。这种类型的动态加载成为装载时加载 ,被包括Windows和Linux的大多数系统采用。装载程序在加载应用软件时要完成的最复杂的工作之一就是加载时链接。

其他操作系统可能在运行时解析引用。在这些系统上,可执行程序调用操作系统API,将库的名字,函数在库中的编号和函数参数一同传递。操作系统负责立即解析然后代表应用调用合适的函数。这种动态链接叫做运行时链接 。因为每个调用都会有系统开销,运行时链接要慢得多,对应用的性能有负面影响。现代操作系统已经很少使用运行时链接。

可以动态链接的库,在Windows上是dynamic link library (DLL),在UNIX或Linux上是Shared Library。库文件是预先编译链接好的可执行文件,存储在计算机的硬盘上。大多数情况下,同一时间多个应用可以使用一个库的同一份拷贝,操作系统不需要加载这个库的多个实例。

Windows 和 Linux 的加载时链接是由操作系统来完成的,格式在不同的系统下有不同的区别,但是原理还是一样的,LZ不必在这个问题上深究。

^_^
power77 2005-09-20
  • 打赏
  • 举报
回复
mark

仅仅是格式不同?
晨星 2005-09-20
  • 打赏
  • 举报
回复
但对程序员来说,应该感觉不到太多的不一样吧。
晨星 2005-09-20
  • 打赏
  • 举报
回复
只能说既有联系又有区别了,毕竟格式是不一样的。

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧