如果我有一个项目,其中有两个模块A
和B
,并且它们都与第三个库C
链接。动态库vs运行时的静态库
这是真的,如果C
从A
和B
静态库,然后调用C
由各自保持的C
一个独立的国家?他们有不同的堆?
在另一方面,如果C
是一个共享库,然后A
和B
将有机会获得的C
共享状态?
p.s.应用程序入口点位于A
或B
。
如果我有一个项目,其中有两个模块A
和B
,并且它们都与第三个库C
链接。动态库vs运行时的静态库
这是真的,如果C
从A
和B
静态库,然后调用C
由各自保持的C
一个独立的国家?他们有不同的堆?
在另一方面,如果C
是一个共享库,然后A
和B
将有机会获得的C
共享状态?
p.s.应用程序入口点位于A
或B
。
这取决于你的操作系统,以及你用来编译链接的选项和 链接。在Unix下,默认情况下,两个或多个共享库中的所有常用符号将解析为加载的第一个库 中的名称;对于大多数Unices而言,这适用于主井名称为 的井(但在Linux中使用的GNU链接程序需要特殊选项 )。在Windows下,这有点棘手;每个静态链接库都会拥有自己的状态副本,并且不会有简单的解决方法,除了创建第三个DLL来包装 静态库,并且只能通过该DLL中的符号访问它。
它非常依赖于您的操作系统。 Windows DLL与\ * nix共享对象的工作方式非常不同,并且\ nix和链接方法的所有风格都没有单一工作模式。 –