鉴于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进行链接?
答案 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
}