C++ 运行时的动态库与静态库

C++ 运行时的动态库与静态库,c++,dynamic-linking,C++,Dynamic Linking,如果我有一个项目,我有两个模块a和B,它们都链接到第三个库C 如果C是一个静态库,那么从a和B对C进行的调用都保持一个单独的C状态,这是真的吗?它们有不同的堆吗 另一方面,如果C是一个共享库,那么a和B可以访问C的共享状态 p、 应用程序入口点位于A或B从应用程序的角度来看,静态链接与动态链接对链接库的状态管理没有影响。该库具有单一状态,所有相关模块都受其约束 我认为您会感到困惑的是,静态链接和动态链接允许操作系统进行优化。动态库可以加载到内存中一次,并针对使用它的每个进程进行不同的映射。这样就

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

如果
C
是一个静态库,那么从
a
B
C
进行的调用都保持一个单独的
C
状态,这是真的吗?它们有不同的堆吗

另一方面,如果
C
是一个共享库,那么
a
B
可以访问
C
的共享状态


p、 应用程序入口点位于
A
B

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


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

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


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

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


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

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


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

这取决于您的操作系统以及用于编译和编辑的选项 链接在Unix下,默认情况下,所有公共符号都包含在两个或多个 共享库将解析为第一个库中的名称 加载;对于大多数Unice,这适用于主菜单中的名称 嗯(但是Linux中使用的GNU链接器需要一个特殊的选项) 为此)。在窗户下,这有点棘手;每个都是静态的 链接库将有自己的状态副本,并且 除了创建第三个DLL来包装 静态库,并且仅通过该库中的符号访问它
DLL。

它取决于您的操作系统以及用于编译和编辑的选项 链接在Unix下,默认情况下,所有公共符号都包含在两个或多个 共享库将解析为第一个库中的名称 加载;对于大多数Unice,这适用于主菜单中的名称 嗯(但是Linux中使用的GNU链接器需要一个特殊的选项) 为此)。在窗户下,这有点棘手;每个都是静态的 链接库将有自己的状态副本,并且 除了创建第三个DLL来包装 静态库,并且仅通过该库中的符号访问它
DLL。

它取决于您的操作系统以及用于编译和编辑的选项 链接在Unix下,默认情况下,所有公共符号都包含在两个或多个 共享库将解析为第一个库中的名称 加载;对于大多数Unice,这适用于主菜单中的名称 嗯(但是Linux中使用的GNU链接器需要一个特殊的选项) 为此)。在窗户下,这有点棘手;每个都是静态的 链接库将有自己的状态副本,并且 除了创建第三个DLL来包装 静态库,并且仅通过该库中的符号访问它
DLL。

它取决于您的操作系统以及用于编译和编辑的选项 链接在Unix下,默认情况下,所有公共符号都包含在两个或多个 共享库将解析为第一个库中的名称 加载;对于大多数Unice,这适用于主菜单中的名称 嗯(但是Linux中使用的GNU链接器需要一个特殊的选项) 为此)。在窗户下,这有点棘手;每个都是静态的 链接库将有自己的状态副本,并且 除了创建第三个DLL来包装 静态库,并且仅通过该库中的符号访问它
DLL。

嗯,好的。这很奇怪,因为在我的应用程序中,我遇到了一个问题,从模块B访问的状态是正常的,但是如果我尝试从模块a访问它们,那么它就会损坏。有人建议我将C构建为一个共享库,而不是一个静态库。os x 10.8,是的,它是多线程的。我提到的模块A是一个我正在移植到mac的现有项目,模块B是CEF1(chromium embedded framework),C是v8.0。我什么都没有。没关系:)不过谢谢你的信息。嗯,好的。这很奇怪,因为在我的应用程序中,我遇到了一个问题,从模块B访问的状态是正常的,但是如果我尝试从模块a访问它们,那么它就会损坏。有人建议我构建