我有一个带有基类(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。
总结一下:
- a.so 包含 MyClassA.h 和 MyClassA.cpp
- b.so 包含 MyClassB.h 和 MyClassB.cpp
- b.so 链接到 a.so
当我尝试编译时,我收到许多由 b.so 引起的 MyClassA 引用错误。
当我编译 b.so 并将 MyClass.h 添加到其中时,该库编译并运行,没有任何错误。因此:
- a.so 包含 MyClassA.h 和 MyClassA.cpp
- b.so 包含 MyClassB.h、MyClassB.cpp 和 MyClassA.h
- 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/