Class 独立库中的成员函数定义,以及 link 依赖项

Class member functions definitions in separate libraries, and link dependencies

给定 class C 在 C.h 中定义, 和成员函数 f1 到 fn,以及成员函数 g1.

f1..fn 的定义在 f.cpp 而 g1 的定义在 g.cpp.

f.cpp 被 link 编辑到 lib1.so 而 g.cpp 被 link 编辑到 lib2.so.

g.cpp依赖于C.h,lib2.so依赖于lib1.so。 但是 lib1.so 并不完全依赖于 lib2.so

当我有使用除 g1() 之外的 C 成员的可执行文件并且我尝试 link 它仅针对 lib1.so 时,linking 失败并出现未解析的引用:

lib1.so:未解决的对 C::g1() 的引用(在 lib2.so 中定义)

如果可执行文件中的代码实际上并不直接使用 g1,我是否可以 linking 完全独立于 lib2?

我认为您所做的是将 g1() 原型放入 C.h,因此您必须像@Yksisarvinen 评论的那样提供它的实现。

你可能想在你的第二个库中做的是用 g1() 原型创建 D.h 或可能从 C.h in [=19] 的 subclass class =] 并为您的 D::f1()

放置新的实现(来自 g1())

最好使用抽象 class 来定义接口并提供 2 个实现。我会做什么的简单示例:

//iface.h
class iface
{
public:
    virtual void f1() = 0;
}
//serial.h & cpp
class serial: public iface
{ 
public:
    final void f1(); //serial implementation in .cpp
}

//para.h & .cpp
class para: public iface
{
public:
    final void f1(); //parallel implementation in .cpp
}