栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在架构上,共享库(SO)和动态链接库(DLL)有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在架构上,共享库(SO)和动态链接库(DLL)有什么区别?

Dll与.so或.dylib(MacOS)文件所使用的机制几乎相同,因此很难确切解释它们之间的区别。

核心区别在于每种文件类型默认情况下可见的内容。.so文件导出语言(gcc)级链接-这意味着(默认情况下)拉入.so时(默认情况下)所有“外部”的C&c
++符号都可用于链接。这也意味着,解析.so文件本质上是一个链接步骤,加载程序不关心符号来自哪个.so文件。它仅遵循.a文件遵循的常规链接步骤规则,以某种顺序搜索指定的.so文件。

另一方面,Dll文件是一种操作系统功能,与语言的链接步骤完全分开。MSVC使用.lib文件来链接静态库和动态库(每个dll文件都会生成一个用于链接的成对的.lib文件),因此,一旦生成该程序,就将其完全“链接”(从语言中心角度)。

但是,在链接阶段,会在代表Dll的库中解析符号,从而允许链接程序在PE文件中构建导入表,其中包含dll的显式列表以及每个dll中引用的入口点。在加载时,Windows不必执行“链接”来解析共享库中的符号:该步骤已经完成-
Windows加载器仅加载dll并直接连接函数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号