Windows – 在架构上,共享对象(SO)和动态链接库(DLL)有什么区别
问题在于题目:在操作系统级实现方面,共享对象和dll的区别是不同的?
我问的原因是因为我最近读了this page扩展Python,其中规定:
有人可以详细说明一下吗?具体来说,我不知道我理解共享对象的描述,包含对他们期望找到的内容的引用。类似地,一个DLL听起来和我一样的机制。 这是对发生了什么的完整解释吗?有更好的吗?有没有什么区别? 我知道如何链接到一个DLL或共享对象和几个机制(.def列表,dllexport / dllimport)用于编写DLL,所以我明确地不寻找一个如何在这些领域;我对背景中发生的事情更感兴趣。 (编辑:另一个明显的点 – 我知道他们在不同的平台上工作,使用不同的文件类型(ELF对PE),ABI不兼容等)
Dll与.so或.dylib(MacOS)文件使用的机制几乎是一样的,所以很难说明什么是差异。
核心区别在于默认情况下,每种类型的文件都可见。 .so文件导出语言(gcc)级别的链接 – 这意味着(默认情况下)所有C& C语言中的“extern”可用于链接.so被插入。 另一方面,Dll文件是一个操作系统功能,与语言的链接步骤完全分开。 MSVC使用.lib文件链接静态和动态库(每个dll文件生成一个用于链接的配对的.lib文件),因此生成的程序一旦建立就完全“链接”(从语言为中心的角度) 。 然而,在链接阶段,在表示Dll的lib中解析了符号,允许链接器在PE文件中构建导入表,其中包含dll的显式列表和每个dll中引用的入口点。在加载时,Windows不必执行“链接”来解决共享库中的符号:该步骤已经完成 – Windows加载器只是加载dll并直接挂接这些函数。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 将Windows驱动程序连接到Userland服务
- windows-phone-8.1 – Windows Phone 8.1中按钮的最小尺寸
- windows-server-2012 – RDS 2012 r2客户端上的网络摄像头?
- winapi – 在MS Windows(XP)上使用来自不同进程的窗口句柄进
- 真实世界的Windows Azure成本计算示例,任何人?
- Windows Server 2016在用户登录时显示文件关联弹出窗口
- .net – 可以按需下载先决条件的好安装程序
- active-directory – User.IsInRole(“fake group”)导致“
- windows cmd install nscp
- windows10远程桌面连接身份验证错误:函数不受支持,这可能
- Windows 7 IIS v7.5上是否存在任何连接限制?
- 服务器安全设置技术实例系列教程--服务器安全和性
- windows – 如何在解析后保留多字节字符()
- Windows上的Docker:如何使用容器IP从主机连接到
- windows-phone-7 – 使用Visual Studio 2012(RTM
- 是否有任何API将Microsoft Exchange服务器与Java
- windows – 查找MSI包的GUID
- 无法在Core i7上运行Powershell 64
- Windows 10 Creators Update更改了PropertyGrid控
- windows-mobile – 存在文件共享冲突. SQL Serve