ali*_*hoo 7 c++ cross-platform dynamic-linking static-linking
在我的申请中,我有3个主要部分:
我在Lib_B中有派生类的原因是,我想在运行时从Exe编译Lib_B.我需要在计算过程中生成派生类而不终止整个系统.这对我来说太重要了.这意味着最初我可能会说Lib_B1是动态加载的,我也可以将其他版本的Lib_B编译为Lib_B2,Lib_B3,Lib_B4等,并动态加载它们.所有Lib_Bx库都有入口点函数来导出它们中的类.
因此,请考虑以下事实:
Lib_A与Exe和Lib_Bx的静态或动态链接有哪些优缺点?如何影响性能,系统大小等?除了我需要为Exe,Lib_A和Lib_Bx使用相同编译器的每个OS之外,是否还有任何危险或困难的情况.
整个系统的设计对我来说是一个非常难的问题,所以任何评论都将受到赞赏.
非常感谢.
根据我对项目描述的理解,您应该动态链接Lib_A:如果将Lib_A静态链接到每个Lib_Bx共享库,则将复制Lib_A代码和静态变量的x倍.
比方说,如果你在Lib_A中有一个类,它有以下形式:
class BaseKlass
{
static int instance_count;
...
};
Run Code Online (Sandbox Code Playgroud)
instance_count将在所有共享库中重复,因此无法BaseKlass计算其实例.
您可能会被虚拟表或RTTI(dynamic_cast)等更微妙的问题所困扰.
你应该看看这个boost.python文档,该文档描述了与我提到的相关的问题.
Boost.python允许创建要在同一进程中加载的python模块(动态库).使用boost.python创建的每个python模块,如果它们要在c ++级别一起通信,例如从另一个模块中的类A派生模块中的类B,则应该与boost.python lib动态链接以避免问题.
| 归档时间: |
|
| 查看次数: |
2167 次 |
| 最近记录: |