动态库与运行时的静态库

时间:2014-07-09 16:18:17

标签: c++ dynamic-linking

如果我有一个项目,我有两个模块AB,并且它们都链接到第三个库C

如果C是静态库,那么来自CA的{​​{1}}的调用是否保持单独的状态{{1} }?他们有不同的堆吗?

另一方面,如果B是共享库,那么CC可以访问共享状态A

P.S。应用程序入口点位于BC

2 个答案:

答案 0 :(得分:2)

这取决于您的操作系统以及用于编译的选项 链接。在Unix下,默认情况下,所有常见符号都在两个或更多 共享库将解析为第一个库中的名称 装;对于大多数Unices,这适用于主要的名称 好吧(但Linux中使用的GNU链接器需要一个特殊选项 为了这)。在Windows下,它有点棘手;每个人静态地 链接库将拥有自己的州和国家副本 没有简单的解决方法,除了创建第三个DLL来包装 静态库,只能通过其中的符号访问它 DLL。

答案 1 :(得分:1)

从应用程序的角度来看,静态链接与动态链接对链接库的状态管理没有任何影响。该库具有单个状态,所有相关模块都受其约束。

我认为你感到困惑的是优化,静态链接与动态链接允许操作系统。动态库可以加载到内存中一次,并为使用它的每个进程进行不同的映射。这样就无需加载已加载的页面的精确副本。