C++通过继承共享库
C++ shared libraries with inheritance
我有一个带有基类(MyClassA)的库(a.so)。另一个库(b.so)有一个从MyClassA(在a.so中)继承的类MyClassB。我编译在a.so隔离的MyClassA.h和MyClassA.cpp。MyClassB.h和MyClassB.cpp是在隔离状态下编译的(引用了MyClassA.h,但没有将MyClassA.h添加到b.so)。然后我将b.so链接到a.so。
总结:
- a.so包含MyClassA.h和MyClassA.cpp
- b.so包含MyClassB.h和MyClassB.cpp
- b.so与a.so相连
当我尝试编译时,我得到了许多MyClassA的引用错误,这些错误是由b.so.引起的
当我编译b.so并将MyClass.h添加到其中时,该库编译并运行时没有任何错误。因此:
- a.so包含MyClassA.h和MyClassA.cpp
- b.so包含MyClassB.h、MyClassB.cpp和MyClassA.h
- b.so与a.so相连
在C++中是否可以使用我的第一个选项,或者是否需要在子类库中始终包含基头?
如果从ClassA
派生ClassB
,则在派生时应定义ClassA
,而不仅仅声明(引用)。这就是为什么必须包含ClassA
头文件的原因。
但如果在cpp
文件中实现ClassA
函数,而不是在头文件中,则ClassA
的实际代码将在a.so
中,因此,包含ClassA
头文件并不是一个真正的问题。
所有派生类在编译时都必须有#include
基类声明。基类实现必须在链接时已知。
在您的情况下:
- a.so包含MyClassA.h和MyClassA.cpp
- b.so包含MyClassB.h和MyClassB.cpp,但MyClassB.h`#包含"MyClassA.h"
- b.so链接a.so使用:
g++-o b.so-la
如果class B
是从class A
派生的,则必须包括class A
头文件。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 头文件-继承c++
- 共享指针继承,而不先显式强制转换
- 嵌套类、继承和C++中的共享指针
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 继承的共享指针无法get_widget
- 了解班级共享指针及其在继承中的使用
- 如何从实现与其他接口共享的接口的类继承
- 如何在继承级别的多个实例之间共享相同的数据
- C++继承,是否可以只有共享祖父类的 1 个副本
- 通过继承共享的静态受保护资源
- C++通过继承共享库
- 从共享对象中的类继承
- 内存共享;继承;基实例和派生实例;c++
- 通过共享指针生成不同继承类的实例
- 多继承-C++类之间的共享实现