类成员在单独的库中定义函数定义,以及链接依赖项

时间:2018-06-02 11:13:53

标签: c++ shared-libraries member

鉴于C.h中定义的C类, 和成员函数f1到fn,以及成员函数g1。

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

f.cpp链接到lib1.so,而g.cpp链接到lib2.so。

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

当我有可执行文件使用除g1()之外的C成员,并且我尝试仅将其链接到lib1.so时,链接将失败并显示未解析的引用:

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

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

1 个答案:

答案 0 :(得分:0)

我认为你所做的就是将g1()原型放入C.h,所以你必须为它提供实现,因为@Yksisarvinen已经评论过。

你可能想要在你的第二个库中做的是使用g1()原型创建Dh,或者从Dh中的Ch创建子类,并为你的D :: f1()

更好的是使用抽象类来定义接口并提供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
}