带有继承的 C++ 共享库

标签 c++ inheritance linker shared

我有一个带有基类(MyClassA)的库(a.so)。另一个库(b.so)有一个类MyClassB,它继承自MyClassA(在a.so中)。我编译在a.so中隔离的MyClassA.h和MyClassA.cpp。 MyClassB.h 和 MyClassB.cpp 是单独编译的(引用 MyClassA.h 但不将 MyClassA.h 添加到 b.so)。然后我将 b.so 链接到 a.so。

总结一下:

  1. a.so 包含 MyClassA.h 和 MyClassA.cpp
  2. b.so 包含 MyClassB.h 和 MyClassB.cpp
  3. b.so 链接到 a.so

当我尝试编译时,我收到许多由 b.so 引起的 MyClassA 引用错误。

当我编译 b.so 并将 MyClass.h 添加到其中时,该库编译并运行,没有任何错误。因此:

  1. a.so 包含 MyClassA.h 和 MyClassA.cpp
  2. b.so 包含 MyClassB.h、MyClassB.cpp 和 MyClassA.h
  3. b.so 链接到 a.so

在 C++ 中是否可以使用我的第一个选项,或者是否需要始终在子类库中包含基本 header ?

最佳答案

如果您从 ClassA 派生 ClassB,您应该在派生时定义您的 ClassA ,而不仅仅是 < em>声明(引用)。这就是为什么您必须包含 ClassA 头文件。

但是,如果您在 cpp 文件中实现 ClassA 函数,而不是在 header 中,则 ClassA 的实际代码将在 a.so 中,因此包含 ClassA 头文件并不是真正的问题。

关于带有继承的 C++ 共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977131/

相关文章:

用于传递具有继承层次结构的事件的 C++ 系统

c++ - Linux上的C/C++多线程服务器/客户端崩溃

JavaScript:访问继承子模块中的 'closed' 变量

java - 在扩展父类(super class)功能的同时屏蔽它

c# - protobuf-net 从 child 到 parent 的继承

c++ - 为什么 ld 链接器允许使用相同的方法定义多个类?

c++ - c++中的替换密码

c++ - 有什么办法可以避免发生堆栈粉碎时终止程序?

在C文件中执行嵌入式lua编译错误

xcode4 - Xcode 自定义构建配置导致静态库出现 "library/file not found"